MyBatis select 标签
备注:本文修订于2022年6月22日
MyBatis真正强大之处在于它的SQL映射,在MyBatis中实现SQL映射的常见标签有:select标签(映射查询语句)、insert标签(映射插入语句)、update标签(映射更新语句)、delete标签(映射删除语句)和sql标签(可被其他语句引用的可重用语句块)。本文主要讲解一下select标签的用法,希望对大家有所帮助。
select标签用法介绍
select标签用来映射查询语句,它是MyBatis中最常用的标签之一。select标签的使用非常简单的。例如:
<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 代码:
string selectUser = "SELECT * FRON TB_USER WHERE ID=?";
Preparedstatement ps = conn.prepareStatement(selectUser) ;
ps.setInt(1,id);
select标签的属性介绍
select标签有很多属性可以配置,它们用来决定每条语句的作用细节。例如:
<select
id="selectUser"
parameterType="int"
resultType="hashmap"
resultMap="userResultMap"
flushCache="false"
useCache="true"
timeout="10000"
fetchsize="256"
statementType="PREPARED"
resultsetType="FORMARD ONLY">
select标签的属性解释如下:
id:命名空间中唯一的标识符,可以被用来引用这条语句。
parameterType:将会传入这条语句的参数类的完全限定名或别名。这个属性是可选的,因为MyBatis可以通过TypeHandler推断出具体传入语句的参数,默认值为unset。
resultType:从这条语句中返回的期望类型的类的完全限定名或别名。
注意:如果返回值是集合类型,那应该是集合可以包含的类型,而不能是集合本身的类型。返回时可以使用resultType或resultMap,但不能同时使用。
resultMap:外部resultMap的命名引用。结果集的映射是MyBatis最强大的特性,许多复杂映射的情形都能通过resultMap迎刃而解。返回时可以使用resultMap 或resultType,但不能同时使用。
flushCache:如果设置为true,则任何时候只要语句被调用,都会导致本地缓存和二级缓存都被清空,默认值为false。
useCache:如果设置为true,将会导致本条语句的结果被二级缓存,在select标签当中默认值为true。
timeout:驱动程序等待数据库返回请求结果的等待秒数,超时则抛出异常。默认值为unset (依赖驱动)。
fetchSize:驱动程序每次批量返回的结果行数。默认值为unset (依赖驱动)。
statementType:值为STATEMENT
、PREPARED
或CALLABLE
。这会让MyBatis分别使用JDBC中的Statement
、PreparedStatement
或CallableStatement
,默认值为PREPARED
。
resultSetType:结果集的类型,值为FORWARD_ONLY
、SCROLL_SENSITIVE
或SCROLLINSENSITIVE
,默认值为unset (依赖驱动)。
databaseId:如果配置了databaseIdProvider
,MyBatis会加载所有的不带databaseId
或匹配当前databaseId
的语句。如果带或者不带的语句都有,则不带的会被忽略。
resultOrdered:这个设置仅针对嵌套结果 select 语句适用:如果为 true,就是假设包含了嵌套结果集或是分组了,这样的话当返回一个主结果行的时候,就不会发生有对前面结果集的引用的情况。这就使得在获取嵌套的结果集的时候不至于导致内存不够用。默认值:false。
resultSets:这个设置仅对多结果集的情况适用,它将列出语句执行后返回的结果集并给每个结果集一个名称,名称是逗号分隔的。