优选主流主机商
任何主机均需规范使用

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>

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

未经允许不得转载:搬瓦工中文网 » Mybatis映射XML文件深度解析与实战案例详解