0%

9.4 深入Mapper XML映射文件 9.4.1 select

9.4 深入Mapper XML映射文件 9.4.1 select

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

1
2
3
4
5
6
7
8
<!-- select操作
parameterType="int"表示该查询语句需要一个int类型的参数
resultType="user"表示返回的是一个user对象 -->
<select
id="selectUser"
parameterType="int"
resultType="hashmap"> select * from tb_user where id = #{id}
</select>

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

1
2
3
String selectUser="select * from tb_user where id=?";
PrepareStatement ps=conn.prepareStatement(selectUser);
ps.setInt(1,id);

select元素的属性

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

1
2
3
4
5
6
7
8
9
10
11
<select
id="selectUser"
parameterType="int"
resultType="hashmap"
resultMap="userResultMap"
flushCache="false"
useCacher="true"
timeout="10000"
fetchSize="256"
statementType="PREPARED"
resultSetType="FORWARD_ONLY">

select元素的属性描述

select元素的属性描述如下:

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

原文链接: 9.4 深入Mapper XML映射文件 9.4.1 select