您好,登錄后才能下訂單哦!
本文小編為大家詳細(xì)介紹“Mybatis的mapper.xml中if標(biāo)簽test判斷怎么使用”,內(nèi)容詳細(xì),步驟清晰,細(xì)節(jié)處理妥當(dāng),希望這篇“Mybatis的mapper.xml中if標(biāo)簽test判斷怎么使用”文章能幫助大家解決疑惑,下面跟著小編的思路慢慢深入,一起來學(xué)習(xí)新知識(shí)吧。
① 將雙引號(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>
長久以來,我們判斷非空非null的判斷條件都是如下所示:
<if test="xxx !=null and xxx !=''">
但是這樣的判斷只是針對(duì)String的,如果是別的類型,這個(gè)條件就不一定成立了,比如最經(jīng)典的:當(dāng)是數(shù)字0時(shí),這個(gè)判斷就會(huì)把0過濾掉,所以如果要判斷數(shù)字,我們一般會(huì)再加上一個(gè)0的判斷(這和mybatis的源碼邏輯有關(guān),有興趣的可以去看看源碼)
<if test="xxx !=null and xxx !='' or xxx == 0">
但是如果傳進(jìn)來的是數(shù)組或者集合呢?我們要再寫別的判斷嗎?能不能封裝個(gè)方法呢?
答案是可以的。
if標(biāo)簽里面的test判斷是可以使用工具類來做判斷的,畢竟test后面跟的也是一個(gè)布爾值,其用法是:
<if test="@完整的包名類名@方法名(傳參)">
例如:
<if test="@com.xxx.util.MybatisTestUtil@isNotEmpty(obj)">
下面是我寫的一個(gè)簡陋的工具類,不是很全面,拋磚引玉,各位可以根據(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); } }
<if test="list.contains(xxx)"> //... </if>
注意,元素類型是字符串的話,參考1中的寫法,一般這樣寫
<!--包含--> <if test="list.contains('示例元素'.toString())"> //... </if> <!--不包含--> <if test="!list.contains('示例元素'.toString())"> //... </if>
map中添加了兩個(gè)int類型的數(shù)據(jù),
map.put("startNum",(page.getPageNum()-1)*page.getNumPerPage()); map.put("pageSize",page.getNumPerPage());
錯(cuò)誤的SQL書寫:
<if test="startNum != null and startNum != '' "> LIMIT #{startNum},#{pageSize} </if>
正確的SQL書寫
<if test="startNum != null"> LIMIT #{startNum},#{pageSize} </if>
因?yàn)閟tartNum里存的是int數(shù)據(jù),所以不能與空字符串進(jìn)行比較,強(qiáng)行比較時(shí)會(huì)報(bào)錯(cuò)。
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>
讀到這里,這篇“Mybatis的mapper.xml中if標(biāo)簽test判斷怎么使用”文章已經(jīng)介紹完畢,想要掌握這篇文章的知識(shí)點(diǎn)還需要大家自己動(dòng)手實(shí)踐使用過才能領(lǐng)會(huì),如果想了解更多相關(guān)內(nèi)容的文章,歡迎關(guān)注億速云行業(yè)資訊頻道。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。