mybatis映射XML文件详解及实例

 更新时间:2017年03月31日 12:00:04   投稿:lqh  
这篇文章主要介绍了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 :

  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>

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

相关文章

  • 关于Hive中的NULL空值处理问题

    关于Hive中的NULL空值处理问题

    这篇文章主要介绍了关于Hive中的NULL空值处理问题,Hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张表,并提供类SQL查询功能,需要的朋友可以参考下
    2023-07-07
  • SQL注入绕过的技巧总结

    SQL注入绕过的技巧总结

    这篇文章主要给大家总结了一些关于SQL注入绕过的技巧,其中包括引号绕过、逗号绕过以及比较符(<,>)绕过,文中给出了详细的介绍和示例代码,相信对大家具有一定的参考价值,需要的朋友们下面来一起看看吧。
    2017-02-02
  • update 子查询使用介绍

    update 子查询使用介绍

    这篇文章主要介绍了update 子查询使用介绍,需要的朋友可以参考下
    2014-08-08
  • sql server中datetime字段去除时间代码收藏

    sql server中datetime字段去除时间代码收藏

    sql下把datetime字段的时间去除的方法整理收集
    2008-04-04
  • Navicat最新永久安装使用方法(推荐)

    Navicat最新永久安装使用方法(推荐)

    Navicat是一款轻量级的用于MySQL连接和管理的工具,非常好用,使用起来方便快捷,简洁,下面我会简单的讲一下其安装以及使用的方法,感兴趣的朋友一起看看吧
    2023-10-10
  • 隐式转换引起的sql慢查询实战记录

    隐式转换引起的sql慢查询实战记录

    大家知道数据库为了提高查询速度,增加索引是必不可少的,但是有些时候即使你加了索引也不定有效果,这篇文章主要给大家介绍了一次因为隐式转换引起的sql慢查询的相关资料,需要的朋友可以参考下。
    2018-04-04
  • Access与sql server的语法区别总结

    Access与sql server的语法区别总结

    这篇文章主要介绍了Access与sql server的语法区别总结,需要的朋友可以参考下
    2007-03-03
  • pgsql binlog监听功能点解析

    pgsql binlog监听功能点解析

    这篇文章主要为大家介绍了pgsql binlog监听功能点解析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-02-02
  • SQL Server不存在或访问被拒绝问题的解决

    SQL Server不存在或访问被拒绝问题的解决

    最近做一个项目(Asp.net+Sql Server 2000),在原来开发的机器上运行没有任何问题.但当我在另外一台机器上调试程序(本机调试)的时候,总出现“SQL Server不存在或访问被拒绝”。相信在任何一个搜索网站输入这样的检索词,一定会获得n多的页面。
    2008-04-04
  • sql注入之手工注入示例详解

    sql注入之手工注入示例详解

    之前和大家分享了基本的SQL注入的知识,这一篇讲的就是在得知注入点的之后,如何有效地进行脱裤。文章通过示例介绍的很详细,对大家的理解和学习很有帮助,下面来一起看看吧。
    2016-09-09

最新评论