欢迎光临
我们一直在努力

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 :

  1. cache – Configuration of the cache for a given namespace.
  2. cache-ref – Reference to a cache configuration from another namespace.
  3. resultMap – The most complicated and powerful element that describes how to load your objects from the database result sets.
  4. sql – A reusable chunk of SQL that can be referenced by other statements.
  5. insert – A mapped INSERT statement.
  6. update – A mapped UPDATE statement.
  7. delete – A mapped DELETE statement.
  8. 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

赞(0) 打赏
主机商所有内容均来自网络,若无意侵犯到您的权利,请及时与联系 QQ 2232175042,将在48小时内删除相关内容!!主机测评网 » mybatis映射XML文件详解及实例

主机商评测网 找服务器 更专业 更方便 更快捷!

专注IDC行业资源共享发布,给大家带来方便快捷的资源查找平台!

联系我们

觉得文章有用就打赏一下文章作者

非常感谢你的打赏,我们将继续提供更多优质内容,让我们一起创建更加美好的网络世界!

支付宝扫一扫

微信扫一扫