最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

概述

mybatis使用xml過程中我們經(jīng)常會遇到要進(jìn)行動態(tài)sql的判斷,如使用if標(biāo)簽和choose標(biāo)簽中的when標(biāo)簽,都會遇到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>

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

問題原因

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

原因就是如下語句:

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

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

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

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

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

0=='‘ //是成立的

就是成立的。

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

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

就變成了

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

所以這個判斷語句永遠(yuǎn)都不可能成立。

問題解決

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

如下:

status!=null and status==0

這樣就可以了。

總結(jié)

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

相關(guān)文章

  • 詳解Java利用實現(xiàn)對稱加密(DES、3DES、AES)

    詳解Java利用實現(xiàn)對稱加密(DES、3DES、AES)

    本篇文章主要介紹了Java利用實現(xiàn)對稱加密(DES、3DES、AES),具有一定的參考價值,有興趣的可以了解一下。
    2017-01-01
  • java驗證碼生成具體代碼

    java驗證碼生成具體代碼

    這篇文章主要為大家分享了java驗證碼生成具體代碼,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-04-04
  • Java 中的vector和list的區(qū)別和使用實例詳解

    Java 中的vector和list的區(qū)別和使用實例詳解

    在大家還沒有了解vector,list,deque的知識之前,我先給大家介紹下stl,本文重點給大家介紹vector和list的區(qū)別及使用,感興趣的的朋友一起看看吧
    2017-09-09
  • 實戰(zhàn)指南:Java編寫Flink?SQL解決難題

    實戰(zhàn)指南:Java編寫Flink?SQL解決難題

    想知道如何利用Java編寫Flink?SQL解決難題嗎?本指南將為您揭示最實用的技巧和策略,讓您輕松應(yīng)對挑戰(zhàn),跟著我們一起探索,讓Java和Flink?SQL成為您問題解決的得力助手!
    2023-12-12
  • Swing常用組件之多行文本區(qū)JTextArea

    Swing常用組件之多行文本區(qū)JTextArea

    這篇文章主要為大家詳細(xì)介紹了Swing常用組件之多行文本區(qū)JTextArea,感興趣的朋友可以參考一下
    2016-05-05
  • Springmvc和ajax如何實現(xiàn)前后端交互

    Springmvc和ajax如何實現(xiàn)前后端交互

    這篇文章主要介紹了Springmvc和ajax如何實現(xiàn)前后端交互,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-05-05
  • springboot啟動后和停止前執(zhí)行方法示例詳解

    springboot啟動后和停止前執(zhí)行方法示例詳解

    這篇文章主要介紹了springboot啟動后和停止前執(zhí)行方法,本文通過示例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-08-08
  • Java的字節(jié)緩沖流與字符緩沖流解析

    Java的字節(jié)緩沖流與字符緩沖流解析

    這篇文章主要介紹了Java的字節(jié)緩沖流與字符緩沖流解析,Java 緩沖流是Java I/O庫中的一種流,用于提高讀寫數(shù)據(jù)的效率,它通過在內(nèi)存中創(chuàng)建緩沖區(qū)來減少與底層設(shè)備的直接交互次數(shù),從而減少了I/O操作的開銷,需要的朋友可以參考下
    2023-11-11
  • Eclipse IDE可支持Java 14編程

    Eclipse IDE可支持Java 14編程

    這篇文章主要介紹了Eclipse IDE可支持Java 14編程,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-04-04

最新評論

军事| 建水县| 霍邱县| 乌拉特前旗| 太仓市| 临夏县| 婺源县| 宁陕县| 福清市| 韩城市| 仙游县| 浪卡子县| 南木林县| 怀远县| 那曲县| 镶黄旗| 瑞昌市| 高唐县| 独山县| 莎车县| 伊金霍洛旗| 钟祥市| 红河县| 蒲江县| 绥阳县| 夏河县| 甘洛县| 玉树县| 蓬安县| 中牟县| 肥东县| 牡丹江市| 大田县| 南丰县| 渝北区| 成武县| 望都县| 息烽县| 南城县| 长子县| 湘潭县|