主页 > 知识库 > mybatis映射XML文件详解及实例

mybatis映射XML文件详解及实例

热门标签:铁路电话系统 Linux服务器 AI电销 服务外包 呼叫中心市场需求 百度竞价排名 网站排名优化 地方门户网站

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 :

  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

简单的例子:

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映射文件常用查询指南
  • mybatis的mapper.xml中resultMap标签的使用详解
  • 浅谈mybatis mapper.xml文件中$和#的区别
  • MyBatis中XML 映射文件中常见的标签说明

标签:黄山 崇左 仙桃 衡水 湖南 铜川 湘潭 兰州

巨人网络通讯声明:本文标题《mybatis映射XML文件详解及实例》,本文关键词  ;如发现本文内容存在版权问题,烦请提供相关信息告之我们,我们将及时沟通与处理。本站内容系统采集于网络,涉及言论、版权与本站无关。
  • 相关文章
  • 收缩
    • 微信客服
    • 微信二维码
    • 电话咨询

    • 400-1100-266