簡體   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