是否有可能在一个地方编写共同条件并重复使用(在MyBatis中)?

时间:2012-10-03 10:49:50

标签: ibatis mybatis

我在mapper.xml内有一些条件几乎相同的查询。是否可以在一个地方编写公共部分并重复使用?

例如:

  select count(*) from table1 t1 inner join table2 t2 where t1.id = t2.id;

同样,我还有另一个问题:

  select id, name from table1 t1 inner join table2 t2 where t1.id = t2.id;

我想将table1 t1 inner join table2 t2 where t1.id = t2.id;放在一个地方,并在两个查询中重复使用。

另外我有类似的东西:

<if test="id != 0">
    AND id = #{id,jdbcType=INTEGER}
</if>
<if test="assignTo != 0">
    AND assign_to = #{assignTo,jdbcType=INTEGER}
</if>
<if test="status != 0">
    AND status = #{status,jdbcType=INTEGER}
</if>   

这在2个查询中也很常见。

1 个答案:

答案 0 :(得分:2)

您可以使用SQL fragments

例如,您可以:

<sql id="yourFragmentId1">
  table1 t1 inner join table2 t2 where t1.id = t2.id;
</sql>

<sql id="yourFragmentId2">
  <if test="id != 0">
    AND id = #{id,jdbcType=INTEGER}
  </if>
  <if test="assignTo != 0">
    AND assign_to = #{assignTo,jdbcType=INTEGER}
  </if>
  <if test="status != 0">
    AND status = #{status,jdbcType=INTEGER}
  </if>
</sql>

然后,在您的查询中,分别使用<include refid="yourFragmentId1" /><include refid="yourFragmentId2" />引用它们。