中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

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

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

Mybatis的mapper.xml中if標簽test判斷怎么使用

發布時間:2022-06-07 09:46:52 來源:億速云 閱讀:4795 作者:iii 欄目:開發技術

本文小編為大家詳細介紹“Mybatis的mapper.xml中if標簽test判斷怎么使用”,內容詳細,步驟清晰,細節處理妥當,希望這篇“Mybatis的mapper.xml中if標簽test判斷怎么使用”文章能幫助大家解決疑惑,下面跟著小編的思路慢慢深入,一起來學習新知識吧。

mapper.xml中if標簽test判斷的用法

1. 字符串等于條件的兩種寫法

① 將雙引號和單引號的位置互換

<if test=' testString != null and testString == "A" '>
   AND 表字段 = #{testString}
</if>

② 加上.toString()

<if test=" testString != null and testString == 'A'.toString() ">
  AND 表字段 = #{testString}
</if>

2. 非空條件的判斷

長久以來,我們判斷非空非null的判斷條件都是如下所示:

<if test="xxx !=null and xxx !=''">

但是這樣的判斷只是針對String的,如果是別的類型,這個條件就不一定成立了,比如最經典的:當是數字0時,這個判斷就會把0過濾掉,所以如果要判斷數字,我們一般會再加上一個0的判斷(這和mybatis的源碼邏輯有關,有興趣的可以去看看源碼)

<if test="xxx !=null and xxx !='' or xxx == 0">

但是如果傳進來的是數組或者集合呢?我們要再寫別的判斷嗎?能不能封裝個方法呢?

答案是可以的。

if標簽里面的test判斷是可以使用工具類來做判斷的,畢竟test后面跟的也是一個布爾值,其用法是:

<if test="@完整的包名類名@方法名(傳參)">

例如:

<if test="@com.xxx.util.MybatisTestUtil@isNotEmpty(obj)">

下面是我寫的一個簡陋的工具類,不是很全面,拋磚引玉,各位可以根據需要補充。

import java.util.Collection;
import java.util.Map;
/**
 * @description: mybatis的<if test="">標簽中使用的非空判斷工具類
 *      使用方式:<if test="@com.xxx.xxx.util.MybatisTsetUtil@isNotEmpty(obj)">
 * @author: singleDog
 * @date: 2020/7/20
 */
public class MybatisTestUtil {
    public static boolean isEmpty(Object o) {
        if (o == null) {
            return true;
        }
        if (o instanceof String) {
            return ((String) o).trim().length() == 0;
        } else if (o instanceof Collection) {
            return ((Collection) o).isEmpty();
        } else if (o instanceof Map) {
            return ((Map) o).isEmpty();
        } else if (o.getClass().isArray()) {
            return ((Object[]) o).length == 0;
        } else {
            return false;
        }
    }
    public static boolean isNotEmpty(Object o) {
        return !isEmpty(o);
    }
}

3. 判斷數組是否包含某個元素

<if test="list.contains(xxx)">
    //...
</if>

注意,元素類型是字符串的話,參考1中的寫法,一般這樣寫

<!--包含-->
<if test="list.contains('示例元素'.toString())">
    //...
</if>

<!--不包含-->
<if test="!list.contains('示例元素'.toString())">
    //...
</if>

mapper.xml <if test>書寫時候的一些坑

1. 分頁

map中添加了兩個int類型的數據,

map.put("startNum",(page.getPageNum()-1)*page.getNumPerPage());
map.put("pageSize",page.getNumPerPage());

錯誤的SQL書寫:

<if test="startNum != null  and startNum != '' ">
       LIMIT #{startNum},#{pageSize}
</if>

正確的SQL書寫

<if test="startNum != null">
       LIMIT #{startNum},#{pageSize}
</if>

因為startNum里存的是int數據,所以不能與空字符串進行比較,強行比較時會報錯。

2. 字符串形式的數據比較

map中添加的是一個字符串形式的“1”

map.put("uploadFlag",upload.getUploadFlag());

如果想在XML中比較,以下兩種方式都可以:

2.1 test使用雙引號

比較的對象使用單引號點toString()方法:

<if test="uploadFlag=='1'.toString()">
     and pw.id in (select pw_id from t_contract_upload)
</if>

2.2 test使用單引號

比較的對象直接使用雙引號:

<if test='uploadFlag=="2" '>
     and pw.id in (select pw_id from t_contract_upload)
</if>

讀到這里,這篇“Mybatis的mapper.xml中if標簽test判斷怎么使用”文章已經介紹完畢,想要掌握這篇文章的知識點還需要大家自己動手實踐使用過才能領會,如果想了解更多相關內容的文章,歡迎關注億速云行業資訊頻道。

向AI問一下細節

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

AI

林州市| 西畴县| 汤原县| 长泰县| 兴宁市| 佛教| 伊宁市| 刚察县| 宁津县| 诸暨市| 平泉县| 遂川县| 区。| 龙里县| 哈尔滨市| 左云县| 青海省| 新乐市| 丽江市| 共和县| 敦化市| 海晏县| 平远县| 连州市| 夏河县| 措美县| 德江县| 五家渠市| 北碚区| 时尚| 西安市| 河北省| 德化县| 涡阳县| 伊金霍洛旗| 霍山县| 策勒县| 招远市| 徐州市| 托克逊县| 亳州市|