1

我有一些查询,里面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 个查询中也很常见。

4

1 回答 1

2

您可以使用SQL 片段

例如,您可以拥有:

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

于 2012-10-19T16:29:30.317 回答