Mybatis的真正强大在于它的语句映射,这是它的魔力所在;
1.select
查询语句标签
<select id="selectPerson" parameterType="int" resultType="hashmap">
SELECT * FROM PERSON WHERE ID = #{id}
</select>
select元素属性
属性 | 描述 |
---|---|
id |
命名空间唯一标识符 |
parameterType |
参数的类全限定名或别名,通过类型处理器解析。默认值为未设置(unset) |
resultType |
返回结果的类全限定名或别名。如果返回的是集合,设置为集合包含的类型 |
resultMap |
对外部resultMap的命名引用 |
flushCache |
设置为true后,语句被调用,会导致本地缓存和二级缓存清空,默认值:false |
useCache |
设置为true后,会将语句的结果被二级缓存缓存起来,默认值:对select元素为true |
timeout |
在抛出异常之前,驱动程序等待数据库返回结果的秒数。默认值为未设置(unset)(依赖数据库驱动) |
fetchSize |
让驱动程序每次批量返回的结果等于这个值。默认值为未设置(unset) (依赖驱动) |
statementType |
可选STATEMENT,PREPARED,CALLABLE |
resultSetType |
FORWARD_ONLY,SCROLL_SENSITIVE, SCROLL_INSENSITIVE 或 DEFAULT(等价于 unset) 中的一个,默认值为 unset (依赖数据库驱动)。 |
databaseId |
如果配置了数据库厂商标识(databaseIdProvider),MyBatis 会加载所有不带 databaseId 或匹配当前 databaseId 的语句;如果带和不带的语句都有,则不带的会被忽略。 |
resultOrdered |
这个设置仅针对嵌套结果 select 语句:如果为 true,将会假设包含了嵌套结果集或是分组,当返回一个主结果行时,就不会产生对前面结果集的引用。 这就使得在获取嵌套结果集的时候不至于内存不够用。默认值:false |
resultSet |
这个设置仅适用于多结果集的情况。它将列出语句执行后返回的结果集并赋予每个结果集一个名称,多个名称之间以逗号分隔 |
2.insert,update和delete
属性 | 描述 |
---|---|
id |
命名空间唯一标识符 |
parameterType |
参数的类全限定名或类名 |
flushCache |
设置true,语句调用,清空本地缓存和二级缓存 |
timeout |
抛出异常之前,返回请求结果的秒数 |
statementType |
可选STATEMENT,PREPARED或CALLABLE,默认PREPARED |
useGeneratedKeys |
使用JDBC的getGeneratedKeys取出数据库内部生成的主键,默认值false |
keyProperty |
指定能够唯一识别对象的属性,使用getGeneratedKeys的返回值或selectKey子元素设置它的值。生成多个,用逗号分割 |
keyColumn |
设置生成键值在表中的列名 |
databaseId |
如果配置了数据库厂商标识(databaseIdProvider),Mybatis会加载所有不带databaseId或匹配当前databaseId的语句。同时存在,忽略不带的 |
3.SQL
用来定义可重用的SQL代码片段,以便在其他语句中使用;
可以在不同的include元素中定义不同的参数值;
<sql id="userColumns"> ${alias}.id,${alias}.username,${alias}.password </sql>
在其他语句中使用
<select id="selectUsers" resultType="map">
select
<include refid="userColumns"><property name="alias" value="t1"/></include>,
<include refid="userColumns"><property name="alias" value="t2"/></include>
from some_table t1
cross join some_table t2
</select>
也可以在include元素中的refid属性或内部语句中使用属性值
<!-- 逐层嵌套 -->
<sql id="sometable">
${prefix}Table
</sql>
<sql id="someinclude">
from
<include refid="${include_target}"/>
</sql>
<select id="select" resultType="map">
select
field1, field2, field3
<include refid&