我在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个查询中也很常见。
答案 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" />
引用它们。