MyBatis——sql

这个元素能够被用来定义可重用的 SQL 代码段,能够包含在其余语句中。它能够被静态地(在加载参数) 参数化. 不一样的属性值经过包含的实例变化. 好比:sql

<sql id="userColumns"> ${alias}.id,${alias}.username,${alias}.password </sql>

这个sql片断能够被包含到其余语句当中,如:code

<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>

以上即为调用id为userColumns的sql,并将其中的${alias}都替换为t一、t2。get

复杂版: 属性值也能够被用在 include 元素的 refid 属性里,如:table

<include refid="${include_target}"/>

或 include 内部语句中,如:select

${prefix}Table

调用sql,如:meta

<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语句中,先使用include标签直接调用id为someinclude的sql的代码块; 以后给${prefix}元素复制为Some,${include_target}元素赋值为sometable; id为someinclude的代码块中有包含了一个include标签,咱们已经经过元素赋值${include_target}变为sometable,所以内部的include将直接调用id为sometable的代码块。map

初步思考:
使用sql代码块,能够大量减小重复代码的编写。好比在根据id或name查询行时,咱们咱们的select域都是相同的,所以能够用sql代码块进行封装,再直接调用include标签便可。d3

相关文章
相关标签/搜索