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