溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

MyBatis動態(tài)<if>標簽如何使用

發(fā)布時間:2023-03-07 11:19:26 來源:億速云 閱讀:125 作者:iii 欄目:開發(fā)技術

這篇文章主要介紹“MyBatis動態(tài)<if>標簽如何使用”的相關知識,小編通過實際案例向大家展示操作過程,操作方法簡單快捷,實用性強,希望這篇“MyBatis動態(tài)<if>標簽如何使用”文章能幫助大家解決問題。

一. if標簽判斷字符串

查詢參數(shù)Param如下。

public class Param {
    private int id;
    private String level;
    private int times;
    private String timestamp;
    // 省略get和set
}

語句如下。

<select id="queryEvents" resultMap="eventResultMap">
    SELECT
        id,
        e_name,
        e_times,
        e_level
    FROM event
    WHERE id=#{id}
    <if test="level != null and level != ''">
        AND e_level=#{level}
    </if>
</select>

上述是判斷字符串是否為空(null或者空串),不為空時,為WHERE子句添加額外的條件。

通過<if>標簽判斷字符串是否為空,是<if>標簽使用頻率最高的用法,但是有時也會通過<if>標簽來判斷字符串的值,這里有多種寫法,下面給出正確寫法,推薦寫法和錯誤寫法。

正確寫法1

<select id="queryEvents" resultMap="eventResultMap">
    SELECT
        id,
        e_name,
        e_times,
        e_level
    FROM event
    WHERE id=#{id}
    <if test="level == 'secondary'">
        AND e_times>10
    </if>
</select>

注意''單引號中一定需要是多個字符,如果只有一個字符,會報錯。

正確寫法2

<select id="queryEvents" resultMap="eventResultMap">
    SELECT
        id,
        e_name,
        e_times,
        e_level
    FROM event
    WHERE id=#{id}
    <if test="level == 'secondary'.toString()">
        AND e_times>10
    </if>
</select>

這種寫法不限制''單引號中的字符個數(shù),一個或多個都可以。

推薦寫法

<select id="queryEvents" resultMap="eventResultMap">
    SELECT
        id,
        e_name,
        e_times,
        e_level
    FROM event
    WHERE id=#{id}
    <if test='level == "secondary"'>
        AND e_times>10
    </if>
</select>

推薦外層用單引號,內(nèi)層用雙引號的寫法,能少踩很多坑。

特別注意:錯誤寫法

<select id="queryEvents" resultMap="eventResultMap">
    SELECT
        id,
        e_name,
        e_times,
        e_level
    FROM event
    WHERE id=#{id}
    <if test="level == 'A'">
        AND e_times>10
    </if>
</select>

這種寫法會報錯,因為像'A'這種單個字符的情況會被判定為字符,所以MyBatis認為字符串在與字符做比較,從而報錯。但是如果是'AA'或者'A'.toString() 這種,就會被判定為字符串,就正常。

二. if標簽判斷數(shù)字

查詢參數(shù)Param如下。

public class Param {
    private int id;
    private String level;
    private int times;
    private String timestamp;
    // 省略get和set
}

語句如下。

<select id="queryEvents3" resultMap="eventResultMap">
    SELECT
        id,
        e_name,
        e_times,
        e_level
    FROM event
    WHERE e_level=#{level}
    <if test="times != null">
        AND e_times>#{times}
    </if>
</select>

通過<if>標簽也可以對數(shù)字判空,同時<if>標簽也可以判斷數(shù)字的值,這里有多種寫法,下面給出正確寫法,推薦寫法和錯誤寫法。

正確寫法1

<select id="queryEvents2" resultMap="eventResultMap">
    SELECT
        id,
        e_name,
        e_times,
        e_level
    FROM event
    WHERE e_level=#{level}
    <if test="times > '10'">
        AND e_times>#{times}
    </if>
</select>

注意''單引號中一定需要是多個數(shù)字。

正確寫法2

<select id="queryEvents2" resultMap="eventResultMap">
    SELECT
        id,
        e_name,
        e_times,
        e_level
    FROM event
    WHERE e_level=#{level}
    <if test="times > '0'.toString()">
        AND e_times>#{times}
    </if>
</select>

這種寫法不限制''單引號中的數(shù)字個數(shù),一個或多個都可以。

正確寫法3

<select id="queryEvents" resultMap="eventResultMap">
    SELECT
        id,
        e_name,
        e_times,
        e_level
    FROM event
    WHERE e_level=#{level}
    <if test="times > 0">
        AND e_times>#{times}
    </if>
</select>

判斷條件可以直接寫數(shù)字。

推薦寫法

<select id="queryEvents2" resultMap="eventResultMap">
    SELECT
        id,
        e_name,
        e_times,
        e_level
    FROM event
    WHERE e_level=#{level}
    <if test='times > "0"'>
        AND e_times>#{times}
    </if>
</select>

推薦外層用單引號,內(nèi)層用雙引號的寫法,能少踩很多坑。

錯誤寫法

<select id="queryEvents" resultMap="eventResultMap">
    SELECT
        id,
        e_name,
        e_times,
        e_level
    FROM event
    WHERE e_level=#{level}
    <if test="times > '0'">
        AND e_times>#{times}
    </if>
</select>

'0'這種單個數(shù)字會被判定為字符,而字符'0'的ASCII值是48,所以times為49及以上時,才滿足times > '0',所以這里有坑,切記。

關于“MyBatis動態(tài)<if>標簽如何使用”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關的知識,可以關注億速云行業(yè)資訊頻道,小編每天都會為大家更新不同的知識點。

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權內(nèi)容。

AI