(10)深入Mapper XML 映射文件之一

480人浏览 / 0人评论

MyBatis的真正强大之处在于它的映射语句,这也是它的魔力所在。由于它的功能异常强大,映射器的XML文件就显得相对简单。如果拿它跟具有相同功能的JDBC代码进行对比,你会立即发现省掉了将近95%的代码。MyBatis 就是针对SQL 构建的,并且比普通的方法做得更好。
SQL映射文件常用的元素如下:
select。映射查询语句。
insert。映射插入语句。
update。映射更新语句。
delete。映射删除语句。
sql。可被其他语句引用的可重用语句块。
cache。给定命名空间的缓存配置。
cache-refo。其他命名空间缓存配置的引用。
resultMap。最复杂也是最强大的元素,用来描述如何从数据率结果集中加载对象。
提示:
parameterMap: 已废弃! 老式风格的参数映射。

select元素

select元素用来映射查询语句,它是MyBatis中最常用的元素之一。
执行简单查询的select元素是非常简单的。例如:


SELECT * FROM TB_USER WHERE ID = #{id}

这个语句被称作selectUser,其接受一个int (或Integer) 类型的参数,并返回一个HashMap 类型的对象,HashMap中的键是列名,值便是结果行中的对应值。
注意参数符号#{id},这是告诉MyBatis创建一个预处理语句参数。通过JDBC,这样的一个参数在SQL中会由一个“?”来标识,并被传递到一个新的预处理语句中。以上MyBatis配置文件执行时会生成如下JDBC 代码:

string selectUser = "SELECT * FRON TB_USER WHERE ID=?";
Preparedstatement ps = conn.prepareStatement(selectUser) ;
ps.setInt(1,id);

select元素有很多属性可以配置,它们用来决定每条语句的作用细节。例如:

select 元素的属性描述如下:
id。在命名空间中唯一的标识符,可以被用来引用这条语句。
parameterType。将会传入这条语句的参数类的完全限定名或别名。这个属性是可选的,因为MyBatis 可以通过TypeHandler 推断出具体传入语句的参数,默认值为unset。
resultType。从这条语句中返回的期望类型的类的完全限定名或别名。注意如果是集合情形,那应该是集合可以包含的类型,而不能是集合本身。返回时可以使用resultType或resultMap,但不能同时使用。
resultMap。外部resultMap 的命名引用。结果集的映射是MyBatis 最强大的特性,对其有一个很好的理解的话,许多复杂映射的情形都能迎刃而解。返回时可以使用resultMap 或resultType,但不能同时使用。
flushCacheo 如果设置为true,则任何时候只要语句被调用,都会导致本地缓存和二级缓存都被清空,默认值为false。
useCache。如果设置为true,将会导致本条语句的结果被二级缓存,在select 元素当
中默认值为true。
timeout。这个设置是在抛出异常之前,驱动程序等待数据库返回请求结果的秒数。默认值为unset (依赖驱动)。
fetchSize。这是尝试影响驱动程序每次批量返回的结果行数和这个设置值相等。默认值为unset (依赖驱动)。
statementType。值为STAT EMENT.PREPARED 或CALLABLE。这会让MyBatis分别使用JDBC 中的Statement、PreparedStatement 或CallableStatement,默认值为PREPARED。
resultSetType。结果集的类型,值为FORWARD_ONLY、SCROLL_SENSITIVE 或SCROLLINSENSITIVE,默认值为unset (依赖驱动)。
databaseld。如果配置了databascldProvider,MyBatis 会加载所有的不带databaseld 或匹配当前databaseld的语句; 如果带或者不带的语句都有,则不带的会被忽略。
resultOrdered。这个设置仅针对嵌套结果select 语句适用: 如果为true,就是假设包含了嵌套结果集或是分组了,这样的话当返回一个主结果行的时候,就不会发生对前面结果集引用的情况。这就使得在获取嵌套的结果集时不至于导致内存不够用。默认值为false。
resultSets。这个设置仅对多结果集的情况适用,它将列出语句执行后返回的结果集并给每个结果集一个名称,名称是逗号分隔的。

全部评论

晴天下起了小雨
2017-10-01 18:00
很喜欢,果断关注了
wjmyly7336064
2017-10-01 18:00
相当实用,赞美了
橘大佬
2017-10-01 18:00
就是有些细节再到位点就好了…