最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Mybatis的mapper.xml中if標(biāo)簽test判斷的用法說(shuō)明

 更新時(shí)間:2022年06月06日 15:55:33   作者:大唐冠軍侯  
這篇文章主要介紹了Mybatis的mapper.xml中if標(biāo)簽test判斷的用法說(shuō)明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

mapper.xml中if標(biāo)簽test判斷的用法

1. 字符串等于條件的兩種寫(xiě)法

① 將雙引號(hào)和單引號(hào)的位置互換

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

② 加上.toString()

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

2. 非空條件的判斷

長(zhǎng)久以來(lái),我們判斷非空非null的判斷條件都是如下所示:

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

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

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

但是如果傳進(jìn)來(lái)的是數(shù)組或者集合呢?我們要再寫(xiě)別的判斷嗎?能不能封裝個(gè)方法呢?

答案是可以的。

if標(biāo)簽里面的test判斷是可以使用工具類來(lái)做判斷的,畢竟test后面跟的也是一個(gè)布爾值,其用法是:

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

例如:

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

下面是我寫(xiě)的一個(gè)簡(jiǎn)陋的工具類,不是很全面,拋磚引玉,各位可以根據(jù)需要補(bǔ)充。

import java.util.Collection;
import java.util.Map;
/**
?* @description: mybatis的<if test="">標(biāo)簽中使用的非空判斷工具類
?* ? ? ?使用方式:<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. 判斷數(shù)組是否包含某個(gè)元素

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

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

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

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

mapper.xml <if test>書(shū)寫(xiě)時(shí)候的一些坑

1. 分頁(yè)

map中添加了兩個(gè)int類型的數(shù)據(jù),

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

錯(cuò)誤的SQL書(shū)寫(xiě):

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

正確的SQL書(shū)寫(xiě)

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

因?yàn)閟tartNum里存的是int數(shù)據(jù),所以不能與空字符串進(jìn)行比較,強(qiáng)行比較時(shí)會(huì)報(bào)錯(cuò)。

2. 字符串形式的數(shù)據(jù)比較

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

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

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

2.1 test使用雙引號(hào)

比較的對(duì)象使用單引號(hào)點(diǎn)toString()方法:

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

2.2 test使用單引號(hào)

比較的對(duì)象直接使用雙引號(hào):

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

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • java反轉(zhuǎn)鏈表的多種解決方法舉例詳解

    java反轉(zhuǎn)鏈表的多種解決方法舉例詳解

    這篇文章主要介紹了java反轉(zhuǎn)鏈表的多種解決方法,分別是使用棧、雙指針和遞歸,每種方法都有其實(shí)現(xiàn)原理和代碼示例,文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2025-04-04
  • SpringBoot實(shí)現(xiàn)郵件發(fā)送的示例代碼

    SpringBoot實(shí)現(xiàn)郵件發(fā)送的示例代碼

    電子郵件是—種用電子手段提供信息交換的通信方式,是互聯(lián)網(wǎng)應(yīng)用最廣的服務(wù)。本文詳細(xì)為大家介紹了SpringBoot實(shí)現(xiàn)發(fā)送電子郵件功能的示例代碼,需要的可以參考一下
    2022-04-04
  • 詳解Spring Aop實(shí)例之AspectJ注解配置

    詳解Spring Aop實(shí)例之AspectJ注解配置

    本篇文章主要介紹了詳解Spring Aop實(shí)例之AspectJ注解配置,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-04-04
  • 關(guān)于MVC設(shè)計(jì)模式及流程解析

    關(guān)于MVC設(shè)計(jì)模式及流程解析

    這篇文章主要介紹了關(guān)于MVC設(shè)計(jì)模式及流程解析,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-05-05
  • 一篇文章帶你了解JAVA面對(duì)對(duì)象之繼承與修飾符

    一篇文章帶你了解JAVA面對(duì)對(duì)象之繼承與修飾符

    這篇文章主要介紹了Java面向?qū)ο缶幊讨惖睦^承,結(jié)合實(shí)例形式較為詳細(xì)的分析了Java面向?qū)ο缶幊填惖母拍睢⒐δ?、使用方法及相關(guān)注意事項(xiàng),需要的朋友可以參考下
    2021-08-08
  • 淺談Maven包沖突的原理及解決方法

    淺談Maven包沖突的原理及解決方法

    這篇文章主要介紹了淺談Maven包沖突的原理及解決方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-07-07
  • Springboot從配置文件properties讀取字符串亂碼的解決

    Springboot從配置文件properties讀取字符串亂碼的解決

    這篇文章主要介紹了Springboot從配置文件properties讀取字符串亂碼的解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-02-02
  • springboot集成spring cache緩存示例代碼

    springboot集成spring cache緩存示例代碼

    本篇文章主要介紹了springboot集成spring cache示例代碼,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-05-05
  • Mybatis批量提交實(shí)現(xiàn)步驟詳解

    Mybatis批量提交實(shí)現(xiàn)步驟詳解

    這篇文章主要介紹了Mybatis批量提交實(shí)現(xiàn)步驟詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-12-12
  • java編譯器的基礎(chǔ)知識(shí)點(diǎn)

    java編譯器的基礎(chǔ)知識(shí)點(diǎn)

    在本篇文章里小編給大家整理的是一篇關(guān)于java編譯器的基礎(chǔ)知識(shí)點(diǎn)內(nèi)容,有興趣的朋友們可以閱讀下。
    2020-02-02

最新評(píng)論

永新县| 贡觉县| 康保县| 巩留县| 广河县| 正镶白旗| 荣成市| 关岭| 吉林省| 徐闻县| 区。| 乌鲁木齐市| 平南县| 收藏| 朝阳市| 堆龙德庆县| 宜川县| 邵东县| 海宁市| 临朐县| 德安县| 永和县| 融水| 普定县| 西峡县| 二连浩特市| 广南县| 彭泽县| 台湾省| 嘉禾县| 渑池县| 司法| 桐庐县| 营山县| 岳阳市| 翁牛特旗| 麟游县| 炉霍县| 清镇市| 文昌市| 扎囊县|