91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

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

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

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

彩票| 儋州市| 临武县| 三台县| 乾安县| 余江县| 日照市| 东明县| 大宁县| 新宾| 崇州市| 惠东县| 漳州市| 阿拉善右旗| 临颍县| 建昌县| 嵩明县| 将乐县| 扎赉特旗| 景宁| 齐齐哈尔市| 恭城| 营口市| 内乡县| 榕江县| 清水河县| 罗源县| 揭阳市| 萨迦县| 阿克陶县| 太湖县| 大悟县| 景德镇市| 蓬溪县| 郧西县| 岳池县| 社旗县| 黎川县| 松阳县| 卓尼县| 始兴县|