<select> 标签用于执行查询操作并返回结果集。<select>标签可以嵌套其他标签,来实现动态SQL的拼接,例如<if>、<where>、<foreach>等。
示例
<select
id="getUserList"
resultType="Users">
select * from user
</select>
属性 |
说明 |
id |
命名空间的唯一标识符,一般是 dao 中对应的方法名 |
parameterType |
参数类型,可选属性。MyBatis 可以通过 TypeHandler 推断出具体传入语句的参数,默认值为 unset |
resultType |
期望返回的数据类型的类的全限定名 |
resultMap |
结果集映射,不可以和 resultType 同时使用。一般如果返回数据类型是常用的类型,比如 String Map List 的时候,可以使用 resultType。如果返回的是简单 POJO 类的时候,也可以直接使用 resultType,如果是复杂的映射或者连级查询的时候就需要使用 resultMap。 |
flushCache |
将其设置为 true,任何时候只要语句被调用,都会导致本地缓存和二级缓存都会被清空,默认值:false。 |
useCache |
将其设置为 true,将会导致本条语句的结果被二级缓存,默认值:对 select 元素为 true |
timeout |
等待数据库返回请求结果的秒数,超时时间 |
fetchSize |
每次获取记录的总条数设定, MySQL不支持fetchSize,默认为一次性取出所有数据 如果是Oracle的话就是默认取出fetchSize条数据。 裸露JDBC防止OOM可以调用statement的enableStreamingResults方法,MyBatis应该在<select fetchSize="-2147483648"> |
statementType |
标记操作SQL的对象
直接操作sql,不进行预编译,获取数据
默认,预处理,参数,进行预编译,获取数据
CALLABLE:执行存储过程 要实现动态传入表名、列名,需要做如下修改 ,添加属性statementType="STATEMENT" ,同时sql里的属有变量取值都改成${xxxx},而不是#{xxx} |
resultSetType |
FORWARD_ONLY,SCROLL_SENSITIVE, SCROLL_INSENSITIVE 或 DEFAULT(等价于 unset) 中的一个,默认值为 unset (依赖数据库驱动)。 |
databaseId |
取值oracle、mysql等,表示sql语句的数据库类型。 元素内部可通过<if test="_databaseId = 'oracle'">来为特定数据库指定不同的sql语句 |
resultOrdered |
这个设置仅针对嵌套结果 select 语句:如果为 true,将会假设包含了嵌套结果集或是分组,当返回一个主结果行时,就不会产生对前面结果集的引用。 这就使得在获取嵌套结果集的时候不至于内存不够用。默认值:false。 |
resultSets |
这个设置仅适用于多结果集的情况。它将列出语句执行后返回的结果集并赋予每个结果集一个名称,多个名称之间以逗号分隔。 |
lang |
用于指定 SQL 的语言类型 |