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