<sql>
标签
<sql>
标签是用来定义可重用的 SQL 代码段。
<sql>
标签可以被包含在其他语句里面, 使用 <include>
标签来包含。
<sql>
标签里面是可以使用 ${} 占位符参数化的(注意, 此处的参数不是调用时传进来的), 不同的属性值通过包含的实例而变化。
<sql>
标签中可以包含的标签
所有的动态 SQL 相关的节点都是可以有的。
用的最多的就是 <include>
节点。
<include>
标签
通过include标签使SQL片段达到代码复用的目的。
<include>
标签必须要有 refid, 可以有0个或多个 property。 通过 property 标签, 将的属性包含进来。
引用另一个xml文件中的<sql>
时,要加上命名空间,若被引用的xml文件存在嵌套,要写明命名空间:
<mapper namespace="com.test.mapper1">
<sql id="status">(1,2,3,4)</sql>
<sql id="where"> STATUS IN <include refid="com.test.mapper1.status"/> </sql>
</mapper>
<mapper namespace="com.test.mapper2">
select * from table where <include refid="com.test.mapper1.where"/></sql>
</mapper>
select * from table where status in (1,2,3,4)
例子
<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="someinclude">
<property name="prefix" value="Some"/>
<property name="include_target" value="sometable"/>
</include>
</select>
select field1, field2, field3 from SomeTable;
<sql id="student"> ${alias}.id,${alias}.name </sql>
<select id="selectStudent" resultType="map">
select
<include refid="student"><property name="alias" value="t1"/></include>
from student t1
</select>
select t1.id, t1.name from student t1;