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)入判斷!?。?/p>
正確的寫法如下
將字符串?dāng)?shù)字toString 一下?。。?!
<if test="payType == '1'.toString()">
?? ?AND rl.pay_type in ('1','ZFBA','WEIX')
</if>搞定??!
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)驗(yàn),希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
spring validation多層對象校驗(yàn)教程
這篇文章主要介紹了spring validation多層對象校驗(yàn)教程,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-10-10
JPA原生SQL實(shí)現(xiàn)增刪改查的示例詳解
JPA除了對JPQL提供支持外,還對原生SQL語句也提供了支持。本文將利用生SQL實(shí)現(xiàn)增刪改查功能,文中的示例代碼講解詳細(xì),需要的可以參考一下2022-09-09
SpringBoot開發(fā)技巧之使用AOP記錄日志示例解析
這篇文章主要為大家介紹了SpringBoot開發(fā)技巧之如何利用AOP記錄日志的示例解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步2021-10-10
Java過濾器與監(jiān)聽器間區(qū)別與聯(lián)系
監(jiān)聽器是一個接口內(nèi)容由我們實(shí)現(xiàn),會在特定時間被調(diào)用,監(jiān)聽器用于監(jiān)聽web應(yīng)用中三大域?qū)ο?request,session,application),信息的創(chuàng)建,銷毀,增加,修改,刪除等動作的發(fā)生,然后做出相應(yīng)的響應(yīng)處理2023-01-01

