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







