中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

mybatis的test坑怎么解決

發布時間:2023-03-30 17:16:46 來源:億速云 閱讀:269 作者:iii 欄目:開發技術

今天小編給大家分享一下mybatis的test坑怎么解決的相關知識點,內容詳細,邏輯清晰,相信大部分人都還太了解這方面的知識,所以分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后有所收獲,下面我們一起來了解一下吧。

概述

mybatis使用xml過程中我們經常會遇到要進行動態sql的判斷,如使用if標簽和choose標簽中的when標簽,都會遇到test條件判斷,test的條件判斷采用的ognl語句。

我遇到的坑是這樣的:

<select id="myFunction">
    select * from student where 1=1
    <if test="status!=null and status!='' and status==0">
        and 2=2
    </if>
    <if test="status!=null and status!='' and status!=0">
        and 3=3
    </if>
</select>

然后當 status=1的時候程序能狗正常運行并添加條件,但是當 status=0的時候死活無法進入第一個條件判斷(當時改變了多種寫法都不行,當時心中千萬個草泥馬就過去了)。

問題原因

最后一直跟蹤查找原因,終于找到了錯誤的地方,以及出處。

原因就是如下語句:

status!=null and status!=‘' and status==0

是不成立的,因為status是Integer類型,當進行status!=null和status==0的判斷都是沒有問題的,但是在判斷status!='&lsquo;的時候問題就來了,既然這個屬性字段是Integer類型如何進行字符串的判空呢?

mybatis的test坑怎么解決

看這個斷點截圖,當status參數為0的時候進行判斷status!=&rsquo;&lsquo;的判斷的時候進入這個位置,由斷點的位置可以知道,需要比較的是 0 和 &rsquo;&lsquo;是否相等,但是這兩個數據連類型都不同怎么能相等呢,但是mybatis進行了轉換比較,但你的參數類型是不是基礎數據類型以及其包裝類的時候,他會把你的這個空進行如下轉換:

mybatis的test坑怎么解決

由這個圖我們知道,最后這個0被轉換為 0.0 ,而這個 &rsquo;&lsquo; 被轉換為0.0,也就是說這個時候的判斷就變成了0.0與0.0的判斷。

所以最后在test語句中判斷參數值如下

0=='‘ //是成立的

就是成立的。

也就說當我們的status=0的時候進行test的參數判斷:

status!=null and status!=‘' and status==0

就變成了

status!=null and status!=0 and status==0

所以這個判斷語句永遠都不可能成立。

問題解決

既然我們知道了原因,那么解決方案就是寫判斷語句ognl的時候一定要按照數據類型進行,不要寫不屬于該參數類型的判斷方式。

如下:

status!=null and status==0

這樣就可以了。

以上就是“mybatis的test坑怎么解決”這篇文章的所有內容,感謝各位的閱讀!相信大家閱讀完這篇文章都有很大的收獲,小編每天都會為大家更新不同的知識,如果還想學習更多的知識,請關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

泾川县| 延庆县| 无锡市| 类乌齐县| 尼勒克县| 岚皋县| 昌黎县| 正宁县| 池州市| 永康市| 瓮安县| 双辽市| 马鞍山市| 诏安县| 车险| 淮滨县| 合江县| 囊谦县| 宽甸| 云林县| 班玛县| 左权县| 大兴区| 安西县| 察隅县| 汕头市| 睢宁县| 闸北区| 丹凤县| 通山县| 新和县| 于都县| 周至县| 桦甸市| 克拉玛依市| 烟台市| 亚东县| 大港区| 建阳市| 乐陵市| 蒙山县|