使用Mybatis遇到的坑之Integer類型參數(shù)的解讀
使用Mybatis遇到的坑之Integer類型參數(shù)
有時候我們使用實體類傳遞參數(shù)時,有些屬性會被設(shè)置為Integer類型,比如status、sort等,在這里,使用Integer類型參數(shù)作為條件時
要注意一點:例如
<if test="bean.activitySort != null and bean.activitySort !=""">
? ? ? ? AND activity_sort = #{bean.activitySort,jdbcType=VARCHAR}
</if>這里對于bean.activitySort的判斷正常情況下如果activitySort是String類型,先判空,再判斷是否是空字符串,這樣是正常的,但是如果activitySort是Integer類型參數(shù),那么使用時就需要注意,此處不能對activitySort進(jìn)行空字符串的判斷,因為什么呢?
因為mybatis在解析Integer類型數(shù)據(jù)時,如果數(shù)據(jù)值為0,會將0解析為空字符串,這樣你傳入的參數(shù)就成為無效的了,所以正常使用Integer類型參數(shù)應(yīng)該是下面這樣:
<if test="bean.activitySort != null">
? ? ? ? AND activity_sort = #{bean.activitySort,jdbcType=VARCHAR}
</if>Mybatis的xml,Integer類型參數(shù)bug問題
當(dāng)有Integer數(shù)據(jù)類型的參數(shù)值為0時,如pid=0,xml中pid==“” 判斷為ture,即不走條件語句
<if test="pid != null and pid != '' ">
AND a.pid = #{pid}
</if>
正確寫法一:還要加上一句 or pid==0
<if test="pid != null and pid != '' or pid ==0">
AND a.pid = #{pid}
</if>
正確方法二:去掉and pid != ''的條件
<if test="pid != null ">
AND a.pid = #{pid}
</if>
原因分析

總結(jié)
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
mybatis mapper互相引用resultMap啟動出錯的解決
這篇文章主要介紹了mybatis mapper互相引用resultMap啟動出錯的解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-08-08
SpringBoot的配置文件(properties與yml)使用方法
配置文件中的配置類型有兩類,一類是系統(tǒng)配置項,這種配置的格式都是固定的,是給系統(tǒng)使用的,另一種是用戶自定義配置,用戶可以隨意地規(guī)定配置項的格式,又用戶自行去設(shè)置和讀取,這篇文章主要介紹了SpringBoot的配置文件(properties與yml)使用方法,需要的朋友可以參考下2023-08-08
基于springboot和redis實現(xiàn)單點登錄
這篇文章主要為大家詳細(xì)介紹了基于springboot和redis實現(xiàn)單點登錄,具有一定的參考價值,感興趣的小伙伴們可以參考一下2019-06-06
SpringBoot + validation 接口參數(shù)校驗的思路詳解
這篇文章主要介紹了SpringBoot + validation 接口參數(shù)校驗,本文通過項目實踐+場景分析給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-10-10

