mybatis中 if-test 數字判斷的坑及解決
if-test數字判斷的坑
在項目中偶然發(fā)現一個判斷數字的if沒有起任何作用,代碼如下
<if test="timeType !=null and timeType!='' and timeType == '3'"> ? ? AND ? ? ... </if>
經過查詢資料發(fā)現,mybatis是用OGNL表達式來解析的,在OGNL的表達式中,數字’3’會被解析成字符,java是強類型的,char 和 一個string 會導致不等,所以if標簽中的sql不會被解析。
所以應該改為:
?<if test="timeType !=null and timeType!='' and timeType == '3'.toString() "> ? ? ? ? ? ? AND ? ? ? ? ? ? ... ?</if>
然后發(fā)現確實解決了這個問題,特此記錄。
mybatis的test判斷注意事項
在使用mybatis進行判斷的時候,一定要注意傳入的數據類型與判斷的目標值類型是否一致。
最近在一次開發(fā)過程,誤將一個傳入的整型數據使用了下面的判斷方式:
<if test="appType != null and appType != ''">
and a.c_appType = #{appType}
</if>其中,appType是一個整型數據。可以看到,在test判斷里面使用了 appType != ''。
在進行業(yè)務功能測試的時候發(fā)現,當傳入的值是0時,該條件篩選沒有起作用,通過調試發(fā)現,mybatis會將空字符串轉換成double類型的0.0,如下圖所示:

同樣的,整數數據也會轉換為double類型,如下圖所示:

所以,mybatis在判斷的時候,數字0和空字符串是相等的,而我們的if判斷里,是兩者不相等時該條件才會起作用。
因此,在使用mybatis判斷的時候,一定要注意類型是否一致,數字類型就不要判斷空字符串的情況了。
以上為個人經驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關文章
SpringMVC框架使用jackson封裝數據過程中遇到的問題及解決
這篇文章主要介紹了SpringMVC框架使用jackson封裝數據過程中遇到的問題及解決,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-07-07
基于Jenkins+Maven+Gitea+Nexus搭建CICD環(huán)境的方式
這篇文章主要介紹了基于Jenkins+Maven+Gitea+Nexus從0到1搭建CICD環(huán)境,大家都知道Nexus是一套“開箱即用”的系統(tǒng)不需要數據庫,它使用文件系統(tǒng)加Lucene來組織數據,需要的朋友可以參考下2022-01-01

