一、sql 标签
SQL 标签是用于抽取可重用的 SQL 片段,将相同的,使用频繁的 SQL 片段抽取出来,单独定义,方便多次引用。
抽取可重用的sql片段。方便后面引用
(1)sql抽取:经常将要查询的列名,或者插入用的列名抽取出来方便引用
(2)include来引用已经抽取的sql:
(3)include还可以自定义一些property,sql 标签内部就能使用自定义的属性
include-property:取值的正确方式${prop},
#{不能使用这种方式}
在前面的查询中,可以发现查询 emp 中的字段时,几乎每个 <select> 标签中都用到了,我们就可以将这段 SQL 抽取出来,单独定义。
<sql id="empColumns">
id, last_name lastName, email email, gender gender from tbl_employee
</sql>
<sql id=""></sql>:设置一段SQL片段,即公共SQL,可以被当前映射文件中所有的SQL语句所访问。
<include refid="empColumns"></include>:引用访问某个SQL片段。
原先的 SQL 语句查询:
<select id="getEmpById" resultType="Emp">
select id, last_name lastName, email, gender from tbl_employee where id = #{id}
</select>
使用 SQL 片段的语句查询:
<select id="getEmpByEid" resultType="Emp">
select
<include refid="empColumns">
<property name="testColomn" value="abc"/> //还可以在这里设置属性
</include>
where eid = #{eid}
</select>
这个时候与原来的运行结果一致。
还可以获取定义的属性值,定义公共的SQL
<sql id="insertColumn">
<if test="_databaseId=='oracle'">
employee_id,last_name,email,${testColumn} //使用${属性} 来获取 <include>中设置的值
</if>
<if test="_databaseId=='mysql'">
last_name,email,gender,d_id
</if>
</sql>
设置属性值:
<insert id="addEmps">
insert into employees(
<include refid="insertColumn">
<property name="testColomn" value="abc"/> //还可以在这里设置属性
</include>
)
values(#{id}, #{lastName}, #{email})
</insert>