好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

mybatis映射XML文件详解及实例

mybatis映射XML文件

一个简单的映射文件:

?

1

2

3

4

<? xml version = "1.0" encoding = "UTF-8" ?>

<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >

< mapper namespace = "com.cnx.wxcar.mapper.CustomerMapper" >

</ mapper >

当然这个文件中没有任何的元素

The Mapper XML files have only a few first class elements :

cache – Configuration of the cache for a given namespace. cache-ref – Reference to a cache configuration from another namespace. resultMap – The most complicated and powerful element that describes how to load your objects from the database result sets. sql – A reusable chunk of SQL that can be referenced by other statements. insert – A mapped INSERT statement. update – A mapped UPDATE statement. delete – A mapped DELETE statement. select – A mapped SELECT statement.

select

简单的例子:

?

1

2

3

< select id = "selectPerson" parameterType = "int" resultType = "hashmap" >

  SELECT * FROM PERSON WHERE ID = #{id}

</ select >

select也有很多属性可以让你配置:

?

1

2

3

4

5

6

7

8

9

10

11

12

< select

  id = "selectPerson"

  parameterType = "int"

  parameterMap = "deprecated"

  resultType = "hashmap"

  resultMap = "personResultMap"

  flushCache = "false"

  useCache = "true"

  timeout = "10000"

  fetchSize = "256"

  statementType = "PREPARED"

  resultSetType = "FORWARD_ONLY" >

insert, update and delete

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

< insert

  id = "insertAuthor"

  parameterType = "domain.blog.Author"

  flushCache = "true"

  statementType = "PREPARED"

  keyProperty = ""

  keyColumn = ""

  useGeneratedKeys = ""

  timeout = "20" >

 

< update

  id = "updateAuthor"

  parameterType = "domain.blog.Author"

  flushCache = "true"

  statementType = "PREPARED"

  timeout = "20" >

 

< delete

  id = "deleteAuthor"

  parameterType = "domain.blog.Author"

  flushCache = "true"

  statementType = "PREPARED"

  timeout = "20" >

语句:

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

< insert id = "insertAuthor" >

  insert into Author (id,username,password,email,bio)

  values (#{id},#{username},#{password},#{email},#{bio})

</ insert >

 

< update id = "updateAuthor" >

  update Author set

   username = #{username},

   password = #{password},

   email = #{email},

   bio = #{bio}

  where id = #{id}

</ update >

 

< delete id = "deleteAuthor" >

  delete from Author where id = #{id}

</ delete >

f your database supports auto-generated key fields (e.g. MySQL and SQL Server),上面的插入语句可以写成:

?

1

2

3

4

5

< insert id = "insertAuthor" useGeneratedKeys = "true"

   keyProperty = "id" >

  insert into Author (username,password,email,bio)

  values (#{username},#{password},#{email},#{bio})

</ insert >

如果你的数据库还支持多条记录插入,可以使用下面这个语句:

?

1

2

3

4

5

6

7

< insert id = "insertAuthor" useGeneratedKeys = "true"

   keyProperty = "id" >

  insert into Author (username, password, email, bio) values

  < foreach item = "item" collection = "list" separator = "," >

   (#{item.username}, #{item.password}, #{item.email}, #{item.bio})

  </ foreach >

</ insert >

sql

这个element可以定义一些sql代码的碎片,然后在多个语句中使用,降低耦合。比如:

?

1

< sql id = "userColumns" > ${alias}.id,${alias}.username,${alias}.password </ sql >

然后在下面的语句中使用:

?

1

2

3

4

5

6

7

< select id= "selectUsers" resultType= "map" >

  select

   <include refid= "userColumns" ><property name = "alias" value= "t1" /></include>,

   <include refid= "userColumns" ><property name = "alias" value= "t2" /></include>

  from some_table t1

   cross join some_table t2

</ select >

Result Maps

官网给了个最最复杂的例子

大体意思呢就是一个博客系统有一个作者,很多博文,博文中有一个作者,很多评论,很多标签(包括了一对多,一对一)

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

<! -- Very Complex Statement -->

< select id= "selectBlogDetails" resultMap= "detailedBlogResultMap" >

  select

     B.id as blog_id,

     B.title as blog_title,

     B.author_id as blog_author_id,

     A.id as author_id,

     A.username as author_username,

     A. password as author_password,

     A.email as author_email,

     A.bio as author_bio,

     A.favourite_section as author_favourite_section,

     P.id as post_id,

     P.blog_id as post_blog_id,

     P.author_id as post_author_id,

     P.created_on as post_created_on,

     P. section as post_section,

     P.subject as post_subject,

     P.draft as draft,

     P.body as post_body,

     C.id as comment_id,

     C.post_id as comment_post_id,

     C. name as comment_name,

     C.comment as comment_text,

     T.id as tag_id,

     T. name as tag_name

  from Blog B

     left outer join Author A on B.author_id = A.id

     left outer join Post P on B.id = P.blog_id

     left outer join Comment C on P.id = C.post_id

     left outer join Post_Tag PT on PT.post_id = P.id

     left outer join Tag T on PT.tag_id = T.id

  where B.id = #{id}

</ select >

 

<! -- Very Complex Result Map -->

<resultMap id= "detailedBlogResultMap" type= "Blog" >

  <constructor>

   <idArg column = "blog_id" javaType= "int" />

  </constructor>

  <result property= "title" column = "blog_title" />

  <association property= "author" javaType= "Author" >

   <id property= "id" column = "author_id" />

   <result property= "username" column = "author_username" />

   <result property= "password" column = "author_password" />

   <result property= "email" column = "author_email" />

   <result property= "bio" column = "author_bio" />

   <result property= "favouriteSection" column = "author_favourite_section" />

  </association>

  <collection property= "posts" ofType= "Post" >

   <id property= "id" column = "post_id" />

   <result property= "subject" column = "post_subject" />

   <association property= "author" javaType= "Author" />

   <collection property= "comments" ofType= "Comment" >

    <id property= "id" column = "comment_id" />

   </collection>

   <collection property= "tags" ofType= "Tag" >

    <id property= "id" column = "tag_id" />

   </collection>

   <discriminator javaType= "int" column = "draft" >

    < case value= "1" resultType= "DraftPost" />

   </discriminator>

  </collection>

</resultMap>

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

原文链接:https://my.oschina.net/gef/blog/704880

查看更多关于mybatis映射XML文件详解及实例的详细内容...

  阅读:17次