当前位置: 代码迷 >> SQL >> MyBatis - sql映射文件详解
  详细解决方案

MyBatis - sql映射文件详解

热度:21   发布时间:2016-05-05 10:05:08.0
MyBatis -- sql映射文件详解

MyBatis 真正的力量是在映射语句中。和对等功能的jdbc来比价,映射文件节省很多的代码量。MyBatis的构建就是聚焦于sql的。

sql映射文件有如下几个顶级元素:(按顺序)

cache配置给定命名空间的缓存。

cache-ref从其他命名空间引用缓存配置。

resultMap最复杂,也是最有力量的元素,用来描述如何从数据库结果集中来加载你的对象。

parameterMap已经被废弃了!老式风格的参数映射。内联参数是首选,这个元素可能在将来被移除。

sql可以重用的SQL块,也可以被其他语句引用。

insert映射插入语句。

update映射更新语句。

delete映射删除语句。

select映射查询语句。

下面就详细描述一些元素:

1、select

查询语句是使用 MyBatis 时最常用的元素之一。

<select id=”selectPerson” parameterType=”int” resultType=”hashmap”>SELECT * FROM PERSON WHERE ID = #{id}</select>
使用一个int(或Integer)类型的参数,并返回一个HashMap类型的对象,其中的键是列名,值是列对应的值。

注意参数注释:

#{id}

select 元素有很多属性允许你配置,来决定每条语句的作用细节。

<selectid=”selectPerson” 在命名空间中唯一的标识符,可以被用来引用这条语句。parameterType=”int” 将会传入这条语句的参数类的完全限定名或别名。parameterMap=”deprecated” (已废弃)resultType=”hashmap” 从这条语句中返回的期望类型的类的完全限定名或别名。注意集合情形,那应该是集合可以包含的类型,而不能是集合本身。使用resultType或resultMap,但不能同时使用。resultMap=”personResultMap” 命名引用外部的resultMap。返回map是MyBatis最具力量的特性,对其有一个很好的理解的话,许多复杂映射的情形就能被解决了。使用 resultMap 或 resultType,但不能同时使用。flushCache=”false” 将其设置为true,不论语句什么时候被调用,都会导致缓存被清空。默认值: false。useCache=”true” 将其设置为 true,将会导致本条语句的结果被缓存。默认值: true。timeout=”10000” 这个设置驱动程序等待数据库返回请求结果,并抛出异常时间的最大等待值。默认不设置(驱动自行处理)。fetchSize=”256” 这是暗示驱动程序每次批量返回的结果行数。默认不设置(驱动自行处理)。statementType=”PREPARED” STATEMENT,PREPARED 或 CALLABLE 的一种。这会让 MyBatis使用选择使用 Statement, PreparedStatement 或 CallableStatement。默认值: PREPARED。resultSetType=”FORWARD_ONLY” FORWARD_ONLY|SCROLL_SENSITIVE|SCROLL_INSENSITIVE中的一种。默认是不设置(驱动自行处理)。>
2、insert, update, delete
数据变更语句 insert, update 和 delete 在它们的实现中非常相似:

<insertid="insertAuthor"  在命名空间中唯一的标识符,可以被用来引用这条语句。parameterType="domain.blog.Author"  将会传入这条语句的参数类的完全限定名或别名。flushCache="true" 将其设置为 true,不论语句什么时候被调用,都会导致缓存被清空。默认值: false。statementType="PREPARED"  STATEMENT,PREPARED 或 CALLABLE 的一种。这会让 MyBatis使用选择使用 Statement, PreparedStatement 或CallableStatement。默认值: PREPARED。keyProperty=""  (仅对 insert有用)标记一个属性, MyBatis 会通过 getGeneratedKeys或者通过 insert 语句的 selectKey 子元素设置它的值。默认:不设置。useGeneratedKeys=""  ( 仅 对 insert 有 用 ) 这 会 告 诉 MyBatis 使 用 JDBC 的getGeneratedKeys 方法来取出由数据(比如:像 MySQL 和 SQLServer 这样的数据库管理系统的自动递增字段)内部生成的主键。默认值: false。timeout="20000"  这个设置驱动程序等待数据库返回请求结果,并抛出异常时间的最大等待值。默认不设置(驱动自行处理)。>
下面就是insert, update 和 delete 语句的示例:

<insert id="insertAuthor" parameterType="domain.blog.Author">       insert into Author (id,username,password,email,bio) values (#{id},#{username},#{password},#{email},#{bio})</insert><update id="updateAuthor" parameterType="domain.blog.Author">    update Author set    username = #{username},    password = #{password},    email = #{email},    bio = #{bio}    where id = #{id}</update><delete id="deleteAuthor” parameterType="int">     delete from Author where id = #{id}</delete>
如前所述,插入语句有一点多,它有一些属性和子元素用来处理主键的生成。首先,如果你的数据库支持自动生成主键的字段(比如MySQL和SQLServer),那么你可以设置 useGeneratedKeys=”true”,而且设置 keyProperty 到你已经做好的目标属性上。例如,如果上面的 Author 表已经对 id 使用了自动生成的列类型,那么语句可以修改为:

<insert id="insertAuthor" parameterType="domain.blog.Author"useGeneratedKeys=”true” keyProperty=”id”>insert into Author (username,password,email,bio)values (#{username},#{password},#{email},#{bio})</insert>
3、sql

这个元素可以被用来定义可重用的SQL代码段,可以包含在其他语句中。

<select id=”selectUsers” parameterType=”int” resultType=”hashmap”>select <include refid=”userColumns”/>from some_tablewhere id = #{id}</select>

后续将会详细介绍缓存和resultMap

版权声明:本文为博主原创文章,未经博主允许不得转载。

  相关解决方案