mybatis的Mapper XML文件配置


MyBatis除了可以用注解来映射sql语句,还可以通过XML配置,相比个人觉得XML映射文件的方式比注解的方式更强大。

在其api文件中的描述为:MyBatis的真正强大在于它的映射语句,也是它的魔力所在。由于它的异常强大,映射器的XML文件就显得相对简单。如果拿它跟具有相同功能的JDBC代码进行对比,你会发现省掉了将近95%的代码。MyBatis就是针对SQL构建的,并且比普通的方法做的更好。

<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" 
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
SQL映射文件有几个顶级元素:
cache——给定命名空间的缓存配置
cache-ref——其他命名空间缓存配置的引用
resultMap——从数据库结果集中加载的对象
parameterMap——已废弃,老式风格的参数映射
sql——可以被其他语句引用的可重用sql语句块
insert——插入语句
update——更新语句
delete——删除语句
select——查询语句

1.select

<select id="selectPerson" parameterType="int" resultType="hashmap">
SELECT * FROM PERSON WHERE ID = #{id}
</select>
相当于JDBC中的

String selectPerson = "SELECT * FROM PERSON WHERE ID=?";
PreparedStatement ps = conn.prepareStatement(selectPerson);
ps
.setInt(1,id);
#{id}就相当于?

*#{id}和${id}的区别:

1)#将传入的数据当成一个字符串,会对自动传入的数据加一个双引号;$将传入的数据直接显示在sql语句中,例如order by ${id}->order by 9

2)#方式能够很大程度上防止sql注入,而$无法防止sql注入

3)$一般用于传入数据库对象,例如传入表名,一般能用#就别用$。order by动态参数时用$不用#.

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">
属性描述
id在命名空间中唯一的标识符,可以被用来引用这条语句。
parameterType将会传入这条语句的参数类的完全限定名或别名。
parameterMap这是引用外部 parameterMap 的已经被废弃的方法。使用内联参数 映射和 parameterType 属性。
resultType从这条语句中返回的期望类型的类的完全限定名或别名。注意集 合情形,那应该是集合可以包含的类型,而不能是集合本身。使 用 resultType 或 resultMap,但不能同时使用。
resultMap命名引用外部的 resultMap。 返回 map 是 MyBatis 最具力量的特性, 对其有一个很好的理解的话, 许多复杂映射的情形就能被解决了。 使用 resultMap 或 resultType,但不能同时使用。
flushCache将其设置为 true,不论语句什么时候被带哦用,都会导致缓存被 清空。默认值:false。
useCache将其设置为 true, 将会导致本条语句的结果被缓存。 默认值: true。
timeout这个设置驱动程序等待数据库返回请求结果,并抛出异常时间的 最大等待值。默认不设置(驱动自行处理)
fetchSize这是暗示驱动程序每次批量返回的结果行数。默认不设置(驱动 自行处理)。
statementTypeSTA TEMENT,PREPARED 或 CALLABLE 的一种。 这会让 MyBatis 使用选择使用 Statement,PreparedStatement 或 CallableStatement。 默认值:PREPARED。
resultSetTypeFORWARD_ONLY|SCROLL_SENSITIVE|SCROLL_INSENSITIVE 中的一种。默认是不设置(驱动自行处理)。
databaseIdIn case there is a configured databaseIdProvider, MyBatis will load all statements with nodatabaseId attribute or with a databaseId that matches the current one. If case the same statement if found with and without thedatabaseId the latter will be discarded.
resultOrderedThis is only applicable for nested result select statements: If this is true, it is assumed that nested results are contained or grouped together such that when a new main result row is returned, no references to a previous result row will occur anymore. This allows nested results to be filled much more memory friendly. Default: false

2.insert,update,delete

属性描述
id在命名空间中唯一的标识符,可以被用来引用这条语句。
parameterType将会传入这条语句的参数类的完全限定名或别名。
parameterMap这是引用外部 parameterMap 的已经被废弃的方法。使用内联参数 映射和 parameterType 属性。
flushCache将其设置为 true,不论语句什么时候被带哦用,都会导致缓存被清 空。默认值:false。
timeout这个设置驱动程序等待数据库返回请求结果, 并抛出异常时间的最 大等待值。默认不设置(驱动自行处理)。
statementTypeSTA TEMENT,PREPARED 或 CALLABLE 的一种。这会让 MyBatis 使用选择使用 Statement,PreparedStatement 或 CallableStatement。 默认值:PREPARED。
useGeneratedKeys( 仅 对 insert 有 用 ) 这 会 告 诉 MyBatis 使 用 JDBC 的 getGeneratedKeys 方法来取出由数据(比如:像 MySQL 和 SQL Server 这样的数据库管理系统的自动递增字段)内部生成的主键。 默认值:false。
keyProperty(仅对 insert 有用) 标记一个属性, MyBatis 会通过 getGeneratedKeys 或者通过 insert 语句的 selectKey 子元素设置它的值。 默认: 不设置。
keyColumn(仅对 insert 有用) 标记一个属性, MyBatis 会通过 getGeneratedKeys 或者通过 insert 语句的 selectKey 子元素设置它的值。 默认: 不设置。
databaseIdIn case there is a configured databaseIdProvider, MyBatis will load all statements with nodatabaseId attribute or with a databaseId that matches the current one. If case the same statement if found with and without thedatabaseId the latter will be discarded. 

*insert插入语句需要返回主键时,需要把useGenratedKeys设置为true,keyProperty表示返回的需要返回的目标属性,比如需要自动生成id的话,keyProperty="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 代码段,可以包含在其他语句中。比如:

<sql id="userColumns"> id,username,password </sql>

这个 SQL 片段可以被包含在其他语句中,例如:

<select id="selectUsers" parameterType="int" resultType="hashmap">
select
<include refid="userColumns"/>
from some_table
where id = #{id}
</select>











智能推荐

注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



猜您在找
MyBatis的Mapper XML映射文件配置解析 mybatis的Mapper文件配置 Mybatis3源码分析(三):解析mapper的xml配置文件 Mybatis映射配置文件Mapper.xml详解 Mybatis 学习笔记 --- 映射接口Mapper xml文件的配置
智能推荐
 
© 2014-2019 ITdaan.com 粤ICP备14056181号  

赞助商广告