MyBatis(五)动态SQL 之 sql 标签(重用片段)

一、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>
 
 
 
原文地址:https://www.cnblogs.com/niujifei/p/15242269.html