我正在使用mybatis xml mapper。 大多数查询包含相同类型的过滤器。 有没有办法将这些常见的过滤器部分或辅助移动为常见位置。
select id="getMaxData" resultMap="Result">
SELECT IFNULL(MAX(data), 0) AS data
FROM well_data WHERE result = 'foo' AND data > 0
<if test="test1 != '' ">
AND test1 = #{test1}
</if>
<if test="test2 != '' ">
AND test2 = #{test2}
</if>
<if test="test3 != '' ">
AND test3 = #{test3}
</if>
</select>
select id="getAverageData" resultMap="Result">
SELECT IFNULL(AVG(data), 0) AS data
FROM well_data WHERE result = 'foo' AND data > 0
<if test="test1 != '' ">
AND test1 = #{test1}
</if>
<if test="test2 != '' ">
AND test2 = #{test2}
</if>
<if test="test3 != '' ">
AND test3 = #{test3}
</if>
</select>
不是每次使用相同的过滤器都有任何方法可以将它放在共同的部分中:
common partial
<if test="test1 != '' ">
AND test1 = #{test1}
</if>
<if test="test2 != '' ">
AND test2 = #{test2}
</if>
<if test="test3 != '' ">
AND test3 = #{test3}
</if>
然后每次我需要时使用这个常见的部分
提前致谢
答案 0 :(得分:1)
您可以尝试使用<include/>
:
<sql id="common-constraints">
<if test="test1 != '' ">
AND test1 = #{test1}
</if>
<if test="test2 != '' ">
AND test2 = #{test2}
</if>
<if test="test3 != '' ">
AND test3 = #{test3}
</if>
</sql>
然后:
<select id="getMaxData" resultMap="Result">
SELECT IFNULL(MAX(data), 0) AS data
FROM well_data WHERE result = 'foo' AND data > 0
<include refid="common-constraints"/>
</select>
另请参阅link,如果它不适用于您的情况。