mybatis if傳入字符串?dāng)?shù)字踩坑記錄及解決
mybatis if傳入字符串?dāng)?shù)字踩坑
前臺頁面內(nèi)容,注意這里的類型為字符串類型的數(shù)字
<li> ?? ?<label>支付類型:</label> ?? ?<form:select path="payType" class="input-medium"> ?? ??? ?<form:option value="">全部</form:option> ?? ??? ?<form:option value="1">線上支付</form:option> ?? ??? ?<form:option value="3">線下支付</form:option> ?? ?</form:select> </li>
后臺 MVC 接收參數(shù):
Class RefundLog { ?? ?.... ?? ?/** ?? ? * 支付類型 1:線上支付服務(wù),3:線下支付服務(wù) ?? ? */ ?? ?private String payType; ?? ?..... } public String refundOrderList(RefundLog refundLog, HttpServletRequest request, HttpServletResponse response, Model model) { ?? ?..... }
此時 mybatis 中使用常規(guī)的字符串判斷,不會進(jìn)入條件,如下,錯誤的寫法:
<if test="payType == '1'"> ?? ?AND rl.pay_type in ('1','ZFBA','WEIX') </if>
經(jīng)過調(diào)試發(fā)現(xiàn),SQL 未進(jìn)入判斷?。?!
正確的寫法如下
將字符串?dāng)?shù)字toString 一下?。。?!
<if test="payType == '1'.toString()"> ?? ?AND rl.pay_type in ('1','ZFBA','WEIX') </if>
搞定?。?/p>
mybatis if比較字符串相等問題
在mybatis中,使用<if test="flag=='1'">
flag為string類型傳入,其值也是“1”,但是這個等式的返回結(jié)果是false
最后發(fā)現(xiàn)mybatis將'1'解析為char類型,所有不相等
可將<if test="flag=='1'">改為<if test='flag=="1"'>或者<if test="flag==1">
這個誤區(qū)在使用mybatis好多年都沒有發(fā)現(xiàn),所以盡量不要使用單字符的String字符串來進(jìn)行比較
mybatis是用OGNL表達(dá)式來解析的,在OGNL的表達(dá)式中,單引號里單個字符會被解析成char類型(多個字符是可以的),java是強(qiáng)類型的,char 和一個string 會導(dǎo)致不等
總結(jié)
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
SpringBoot整合Redis使用@Cacheable和RedisTemplate
本文主要介紹了SpringBoot整合Redis使用@Cacheable和RedisTemplate,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2022-07-07Spring Data JPA 之 JpaRepository的使用
這篇文章主要介紹了Spring Data JPA 之 JpaRepository的使用方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-02-02springboot如何開啟一個監(jiān)聽線程執(zhí)行任務(wù)
這篇文章主要介紹了springboot如何開啟一個監(jiān)聽線程執(zhí)行任務(wù)問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-02-02JAXB命名空間及前綴_動力節(jié)點Java學(xué)院整理
這篇文章主要給大家介紹了關(guān)于JAXB命名空間及前綴的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧。2017-08-08mybatis-plus之如何根據(jù)數(shù)據(jù)庫主鍵定義字段類型
這篇文章主要介紹了mybatis-plus之如何根據(jù)數(shù)據(jù)庫主鍵定義字段類型問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-07-07SpringBoot整合Mybatis與thymleft實現(xiàn)增刪改查功能詳解
MybatisPlus是國產(chǎn)的第三方插件,?它封裝了許多常用的CURDapi,免去了我們寫mapper.xml的重復(fù)勞動。本文將整合MybatisPlus實現(xiàn)增刪改查功能,感興趣的可以了解一下2022-12-12全面解釋java中StringBuilder、StringBuffer、String類之間的關(guān)系
String的值是不可變的,這就導(dǎo)致每次對String的操作都會生成新的String對象,不僅效率低下,而且大量浪費有限的內(nèi)存空間,StringBuffer是可變類,和線程安全的字符串操作類,任何對它指向的字符串的操作都不會產(chǎn)生新的對象,StringBuffer和StringBuilder類功能基本相似2013-01-01Spring中配置Transaction與不配置的區(qū)別及說明
這篇文章主要介紹了Spring中配置Transaction與不配置的區(qū)別及說明,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-07-07