mybatis映射XML文件的示例分析

75次阅读
没有评论

共计 4731 个字符,预计需要花费 12 分钟才能阅读完成。

这篇文章主要介绍 mybatis 映射 XML 文件的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!

mybatis 映射 XML 文件

一个简单的映射文件:

?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

简单的例子:

select id= selectPerson  parameterType= int  resultType= hashmap 
 SELECT * FROM PERSON WHERE ID = #{id}
 /select

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

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

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

语句:

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),上面的插入语句可以写成:

insert id= insertAuthor  useGeneratedKeys= true 
 keyProperty= id 
 insert into Author (username,password,email,bio)
 values (#{username},#{password},#{email},#{bio})
 /insert

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

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 代码的碎片,然后在多个语句中使用,降低耦合。比如:

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

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

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

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

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

!-- 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 文件的示例分析”这篇文章的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注丸趣 TV 行业资讯频道!

正文完
 
丸趣
版权声明:本站原创文章,由 丸趣 2023-08-04发表,共计4731字。
转载说明:除特殊说明外本站除技术相关以外文章皆由网络搜集发布,转载请注明出处。
评论(没有评论)