使用Mybatis遇到的坑之Integer類型參數(shù)的解讀
使用Mybatis遇到的坑之Integer類型參數(shù)
有時(shí)候我們使用實(shí)體類傳遞參數(shù)時(shí),有些屬性會(huì)被設(shè)置為Integer類型,比如status、sort等,在這里,使用Integer類型參數(shù)作為條件時(shí)
要注意一點(diǎn):例如
<if test="bean.activitySort != null and bean.activitySort !="""> ? ? ? ? AND activity_sort = #{bean.activitySort,jdbcType=VARCHAR} </if>
這里對(duì)于bean.activitySort的判斷正常情況下如果activitySort是String類型,先判空,再判斷是否是空字符串,這樣是正常的,但是如果activitySort是Integer類型參數(shù),那么使用時(shí)就需要注意,此處不能對(duì)activitySort進(jìn)行空字符串的判斷,因?yàn)槭裁茨兀?/p>
因?yàn)閙ybatis在解析Integer類型數(shù)據(jù)時(shí),如果數(shù)據(jù)值為0,會(huì)將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時(shí),如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é)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
java實(shí)現(xiàn)OpenGL ES紋理映射的方法
這篇文章主要介紹了java實(shí)現(xiàn)OpenGL ES紋理映射的方法,以實(shí)例形式較為詳細(xì)的分析了紋理映射的實(shí)現(xiàn)技巧,需要的朋友可以參考下2015-06-06java 中的instanceof用法詳解及instanceof是什么意思(推薦)
instanceof 是 Java 的保留關(guān)鍵字。它的作用是測(cè)試它左邊的對(duì)象是否是它右邊的類的實(shí)例,返回 boolean 的數(shù)據(jù)類型。接下來通過本文給大家介紹java 中的instanceof用法詳解及instanceof是什么意思,需要的朋友參考下吧2017-11-11java中Map、Set、List的簡(jiǎn)單使用教程(快速入門)
這篇文章主要給大家介紹了關(guān)于java中Map、Set、List簡(jiǎn)單使用教程,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-01-01詳解springboot通過Async注解實(shí)現(xiàn)異步任務(wù)及回調(diào)的方法
這篇文章主要介紹了springboot通過Async注解實(shí)現(xiàn)異步任務(wù)及回調(diào),文中通過一個(gè)簡(jiǎn)單示例來直觀的理解什么是同步調(diào)用,在單元測(cè)試用例中,注入?SyncTask?對(duì)象,并在測(cè)試用例中執(zhí)行?doTaskOne(),doTaskTwo(),doTaskThree()?三個(gè)方法,具體實(shí)現(xiàn)方式跟隨小編一起看看吧2022-05-05java如何更改數(shù)據(jù)庫中的數(shù)據(jù)
這篇文章主要介紹了java如何更改數(shù)據(jù)庫中的數(shù)據(jù),修改數(shù)據(jù)庫是數(shù)據(jù)庫操作必不可少的一部分,使用Statement接口中的excuteUpdate()方法可以修改數(shù)據(jù)表中的數(shù)據(jù),感興趣的朋友跟隨小編一起看看吧2021-11-11深入Synchronized和java.util.concurrent.locks.Lock的區(qū)別詳解
本篇文章是對(duì)Synchronized和java.util.concurrent.locks.Lock的區(qū)別進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下2013-06-06