欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

mybatis的test坑及解決(不等于‘‘ 且 不等于0)

 更新時間:2023年03月30日 16:49:51   作者:Lou_Lan  
這篇文章主要介紹了mybatis的test坑及解決(不等于‘‘ 且 不等于0),具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教

概述

mybatis使用xml過程中我們經(jīng)常會遇到要進行動態(tài)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!='‘的時候問題就來了,既然這個屬性字段是Integer類型如何進行字符串的判空呢?

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

由這個圖我們知道,最后這個0被轉(zhuǎn)換為 0.0 ,而這個 ’‘ 被轉(zhuǎn)換為0.0,也就是說這個時候的判斷就變成了0.0與0.0的判斷。

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

0=='‘ //是成立的

就是成立的。

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

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

就變成了

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

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

問題解決

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

如下:

status!=null and status==0

這樣就可以了。

總結(jié)

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Java中反射詳解

    Java中反射詳解

    本文主要介紹了Java中反射的相關(guān)知識。具有很好的參考價值,下面跟著小編一起來看下吧
    2017-02-02
  • Spring Boot 自定義starter的示例代碼

    Spring Boot 自定義starter的示例代碼

    這篇文章主要介紹了Spring Boot 自定義starter的示例代碼,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-11-11
  • Springboot詳解線程池與多線程及阻塞隊列的應用詳解

    Springboot詳解線程池與多線程及阻塞隊列的應用詳解

    本例應用線程池、多線程、阻塞隊列處理一個流程任務。本例處理一個訂單流程,主要包括生成訂單、訂單處理、訂單入庫,下面我們一起看看
    2022-06-06
  • 兩種JAVA實現(xiàn)短網(wǎng)址服務算法

    兩種JAVA實現(xiàn)短網(wǎng)址服務算法

    這篇文章介紹了兩種JAVA實現(xiàn)短網(wǎng)址服務算法,一種是基于MD5碼的,一種是基于自增序列的,需要的朋友可以參考下
    2015-07-07
  • JAVA隨機數(shù)隨機字母的實現(xiàn)(微信搶紅包小練習)

    JAVA隨機數(shù)隨機字母的實現(xiàn)(微信搶紅包小練習)

    這篇文章主要介紹了JAVA隨機數(shù)隨機字母的實現(xiàn)(微信搶紅包小練習),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-04-04
  • Java org.w3c.dom.Document 類方法引用報錯

    Java org.w3c.dom.Document 類方法引用報錯

    這篇文章主要介紹了Java org.w3c.dom.Document 類方法引用報錯的解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-08-08
  • Java?Redisson多策略注解限流

    Java?Redisson多策略注解限流

    這篇文章主要介紹了Java?Redisson多策略注解限流,文章使用Redisson的RRateLimiter進行限流,詳細介紹,感興趣的小伙伴可以參考下面文章內(nèi)容
    2022-09-09
  • springboot返回圖片流的實現(xiàn)示例

    springboot返回圖片流的實現(xiàn)示例

    本文主要介紹了springboot返回圖片流的實現(xiàn)示例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2022-08-08
  • Java 添加、替換、刪除PDF中的圖片的示例代碼

    Java 添加、替換、刪除PDF中的圖片的示例代碼

    這篇文章主要介紹了Java 添加、替換、刪除PDF中的圖片,本文通過示例代碼給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-02-02
  • Java中對象快速復制的幾種方式詳解

    Java中對象快速復制的幾種方式詳解

    這篇文章主要介紹了Java中對象快速復制的幾種方式詳解,對象的克隆是指創(chuàng)建一個新的對象,且新的對象的狀態(tài)與原始對象的狀態(tài)相同,當對克隆的新對象進行修改時,不會影響原始對象的狀態(tài),需要的朋友可以參考下
    2023-08-08

最新評論