查询 ‹select›

Exisi 2021-03-27 07:29:05
Categories: Tags:

<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可以调用statementenableStreamingResults方法,MyBatis应该在<select fetchSize="-2147483648">

statementType

标记操作SQL的对象

  1. STATEMENT-------------------->$—Statement

直接操作sql,不进行预编译,获取数据

  1. PrepareStatement-------------->#—PreparedStatement

默认,预处理,参数,进行预编译,获取数据

  1. CALLABLESTATEMENT------->CallableStatement

CALLABLE:执行存储过程

要实现动态传入表名、列名,需要做如下修改 ,添加属性statementType="STATEMENT" ,同时sql里的属有变量取值都改成${xxxx},而不是#{xxx}

resultSetType

FORWARD_ONLYSCROLL_SENSITIVE, SCROLL_INSENSITIVE DEFAULT(等价于 unset) 中的一个,默认值为 unset (依赖数据库驱动)。

databaseId

取值oraclemysql等,表示sql语句的数据库类型。

元素内部可通过<if test="_databaseId = 'oracle'">来为特定数据库指定不同的sql语句

resultOrdered

这个设置仅针对嵌套结果 select 语句:如果为 true,将会假设包含了嵌套结果集或是分组,当返回一个主结果行时,就不会产生对前面结果集的引用。 这就使得在获取嵌套结果集的时候不至于内存不够用。默认值:false

resultSets

这个设置仅适用于多结果集的情况。它将列出语句执行后返回的结果集并赋予每个结果集一个名称,多个名称之间以逗号分隔。

lang

用于指定 SQL 的语言类型

 

 

来自 <https://mybatis.net.cn/sqlmap-xml.html#cache>