MyBatis參數(shù)條件查詢傳入的值為0時(shí)的判斷問(wèn)題及解決
MyBatis參數(shù)條件查詢傳入的值為0判斷
MyBatis條件查詢對(duì)字段判斷是否為空一般為:
<if test="testValue!=null and testValue != ''">
and test_value = #{testValue}
</if>如果傳入?yún)?shù)為Integer類(lèi)型且值為0時(shí),會(huì)把0轉(zhuǎn)為空串
源碼真實(shí)情況
MyBatis解析的所有sqlNode節(jié)點(diǎn),針對(duì)if節(jié)點(diǎn)會(huì)交給IfSqlNode來(lái)處理,進(jìn)過(guò)層層處理,最終都會(huì)調(diào)用OgnlOps.class類(lèi)的doubleValue(Object value)方法
public static double doubleValue(Object value) throws NumberFormatException {
if (value == null) {
return 0.0D;
} else {
Class c = value.getClass();
if (c.getSuperclass() == Number.class) {
return ((Number)value).doubleValue();
} else if (c == Boolean.class) {
return ((Boolean)value).booleanValue() ? 1.0D : 0.0D;
} else if (c == Character.class) {
return (double)((Character)value).charValue();
} else {
String s = stringValue(value, true);
return s.length() == 0 ? 0.0D : Double.parseDouble(s);
}
}
}
0和""都調(diào)用該方法返回的double值都為0.0,在進(jìn)行比較。
處理方法
<if test="testValue!=null and testValue!='' or 0 == testValue">
and test_value = #{testValue}
</if>
或者
<if test="testValue!=null">
and test_value = #{testValue}
</if>總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Java實(shí)現(xiàn)BP神經(jīng)網(wǎng)絡(luò)MNIST手寫(xiě)數(shù)字識(shí)別的示例詳解
這篇文章主要為大家詳細(xì)介紹了Java實(shí)現(xiàn)BP神經(jīng)網(wǎng)絡(luò)MNIST手寫(xiě)數(shù)字識(shí)別的相關(guān)方法,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起了解一下2023-01-01
通過(guò)Maven進(jìn)行jedis連接redis的實(shí)現(xiàn)
這篇文章主要介紹了通過(guò)Maven進(jìn)行jedis連接redis的實(shí)現(xiàn),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-07-07
SpringBoot AOP導(dǎo)致service注入后是null的問(wèn)題
本文主要講述了如何利用SpringAOP實(shí)現(xiàn)用戶操作日志的記錄,首先,引入SpringBoot的AOP依賴,然后,選擇基于注解的形式來(lái)實(shí)現(xiàn)日志操作,以避免污染原有代碼和邏輯,在理解了SpringBootAOP的一些注解后,需要記錄用戶的正常請(qǐng)求以及異常請(qǐng)求的信息2024-10-10
spring?boot項(xiàng)目自定義參數(shù)校驗(yàn)規(guī)則示例詳解
這篇文章主要介紹了spring boot項(xiàng)目如何自定義參數(shù)校驗(yàn)規(guī)則,自定義校驗(yàn)規(guī)則和自帶的規(guī)則實(shí)現(xiàn)方式一樣,先自定義一個(gè)注解,然后指定校驗(yàn)類(lèi),在校驗(yàn)類(lèi)里實(shí)現(xiàn)具體的校驗(yàn)規(guī)則,本文結(jié)合示例代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下2023-07-07
SpringBoot使用SpringDoc+OpenAPI3.0實(shí)現(xiàn)接口文檔自動(dòng)生成
本文介紹了在前后端分離項(xiàng)目中使用SpringDoc實(shí)現(xiàn)接口文檔自動(dòng)生成的方法,包括核心依賴、啟動(dòng)配置、常用注解、生產(chǎn)環(huán)境配置、帶Token權(quán)限接口調(diào)試等內(nèi)容,提高了接口文檔的生成效率和維護(hù)性,需要的朋友可以參考下2026-03-03
使用Java實(shí)現(xiàn)一個(gè)簡(jiǎn)單的定時(shí)器
這篇文章主要為大家詳細(xì)介紹了如何使用Java實(shí)現(xiàn)一個(gè)簡(jiǎn)單的延時(shí)/定時(shí)器,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2024-12-12
Java錯(cuò)誤:進(jìn)行語(yǔ)法分析時(shí)已到達(dá)文件結(jié)尾的解決
這篇文章主要介紹了Java錯(cuò)誤:進(jìn)行語(yǔ)法分析時(shí)已到達(dá)文件結(jié)尾的解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-08-08
Java中Arrays數(shù)組工具類(lèi)的基本使用詳解
Arrays類(lèi)中的方法都是static修飾的靜態(tài)方法,在使用的時(shí)候可以直接使用類(lèi)名進(jìn)行調(diào)用,而"不用"使用對(duì)象來(lái)調(diào)用(注意:是"不用"?而不是?"不能"),這篇文章主要給大家介紹了關(guān)于Java中Arrays數(shù)組工具類(lèi)的基本使用,需要的朋友可以參考下2021-12-12

