繁体   English   中英

如何在mybatis XML映射器中使用局部函数或辅助函数?

[英]How to use partials or helpers in mybatis XML mapper?

我正在使用mybatis xml映射器。 大多数查询包含相同类型的过滤器。 有什么办法可以将这些公共过滤器移到局部或辅助位置中作为公共位置。

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>

然后每当我需要时使用这个通用部分

提前致谢

您可以尝试使用<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>

如果您的案例不起作用,请参阅链接

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM