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

在Mybatis使用Integer與''進(jìn)行比較的坑及解決

 更新時(shí)間:2023年03月31日 08:37:36   作者:WINGZINGLIU  
這篇文章主要介紹了在Mybatis使用Integer與''進(jìn)行比較的坑及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

使用Integer與''進(jìn)行比較的坑

前段時(shí)間遇到一個(gè)bug,就是修改某一個(gè)integer類型的值的時(shí)候,除了修改為0 其他的值都可以進(jìn)行修改。只要想把這個(gè)字段改成0 就似乎沒有走update這個(gè)字段的語(yǔ)句。(前段時(shí)間比較忙也就沒有記下這個(gè)筆記)

相信很多朋友在使用Mybatis的時(shí)候都會(huì)去使用通用一點(diǎn)的insert或者update語(yǔ)句,類似加入以下這種判斷來(lái)進(jìn)行復(fù)用。

<if test="orgName != null and orgName != ''">
? ? orgName =#{orgName ,jdbcType=VARCHAR},
</if>

也就是只有orgName有有效值的時(shí)候才會(huì)進(jìn)入set語(yǔ)句,但是在對(duì)于Integer類型下的判斷就會(huì)有一定的影響。

經(jīng)過(guò)我的測(cè)試發(fā)現(xiàn)mybatis會(huì)將Integer值的0等于空字符串''

例如傳入的num的值為0,if標(biāo)簽里面一樣寫

num != null and num != ''

當(dāng)num的值為0 ,mybatis會(huì)當(dāng)做0等于空串,也就不會(huì)進(jìn)入此if里面的代碼塊。

比如update語(yǔ)句,如果傳進(jìn)來(lái)的值為0那么這個(gè)字段就不會(huì)被update掉。

也就是說(shuō)在對(duì)Integer類型的值進(jìn)行判斷的時(shí)候,只需要加入!= null 即可。

Integer類型參數(shù)在Mybatis中的比較問題

案例

當(dāng)使用mybatis傳入?yún)?shù)為Integer類型,使用條件構(gòu)造語(yǔ)句時(shí)偶爾會(huì)導(dǎo)致判斷錯(cuò)誤。如下

select * from tbl_user where 1=1
<if test="flag != null and flag != '' ">
? ? and flag = #{flag}
</if>

當(dāng)flag傳入?yún)?shù)為0,會(huì)導(dǎo)致條件構(gòu)造失??;SQL執(zhí)行結(jié)果不是我們想要的

原因分析

mybatis在預(yù)編譯sql時(shí),使用OGNL表達(dá)式來(lái)解析if標(biāo)簽,對(duì)于Integer類型屬性,在判斷不等于''時(shí),會(huì)返回''的長(zhǎng)度,也就是0

源碼:

(s.length() == 0) ? 0.0 : Double.parseDouble( s )

因此表達(dá)式 flag != ''被當(dāng)做 flag != 0 來(lái)判斷,所以當(dāng)flag為0時(shí),if條件判斷不通過(guò)

總結(jié)

if條件判斷number類型,沒必要判斷''的情況,只需判斷null的情況即可;

如果非要判斷''的情況,那么要考慮到等于0的情況,即<if test="flag != '' or flag == 0">

最后

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

相關(guān)文章

  • Java將字符串String轉(zhuǎn)換為整型Int的兩種方式

    Java將字符串String轉(zhuǎn)換為整型Int的兩種方式

    這篇文章主要介紹了Java如何將字符串String轉(zhuǎn)換為整型Int,在 Java 中要將 String 類型轉(zhuǎn)化為 int 類型時(shí),需要使用 Integer 類中的 parseInt() 方法或者 valueOf() 方法進(jìn)行轉(zhuǎn)換,本文通過(guò)實(shí)例代碼給大家詳細(xì)講解,需要的朋友可以參考下
    2023-04-04
  • Java橋接模式原理及用法解析

    Java橋接模式原理及用法解析

    這篇文章主要介紹了Java橋接模式原理及用法解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-05-05
  • Sping中如何處理@Bean注解bean同名的問題

    Sping中如何處理@Bean注解bean同名的問題

    這篇文章主要介紹了Sping中如何處理@Bean注解bean同名的問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-06-06
  • SpringBoot集成vue的開發(fā)解決方案

    SpringBoot集成vue的開發(fā)解決方案

    這篇文章主要介紹了SpringBoot集成vue的開發(fā)解決方案,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-12-12
  • mybatis中注解與xml配置的對(duì)應(yīng)關(guān)系和對(duì)比分析

    mybatis中注解與xml配置的對(duì)應(yīng)關(guān)系和對(duì)比分析

    這篇文章主要介紹了mybatis中注解與xml配置的對(duì)應(yīng)關(guān)系和對(duì)比分析,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-08-08
  • Java實(shí)現(xiàn)數(shù)據(jù)庫(kù)連接池簡(jiǎn)易教程

    Java實(shí)現(xiàn)數(shù)據(jù)庫(kù)連接池簡(jiǎn)易教程

    這篇文章主要為大家介紹了Java實(shí)現(xiàn)數(shù)據(jù)庫(kù)連接池簡(jiǎn)易教程,感興趣的小伙伴們可以參考一下
    2016-01-01
  • springboot返回前端中文亂碼的解決

    springboot返回前端中文亂碼的解決

    這篇文章主要介紹了springboot返回前端中文亂碼的解決,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-09-09
  • 如何利用jwt來(lái)保護(hù)你的接口服務(wù)

    如何利用jwt來(lái)保護(hù)你的接口服務(wù)

    項(xiàng)目軟件要對(duì)外提供部分定制接口,為了保證軟件數(shù)據(jù)的安全性,這篇文章主要給大家介紹了關(guān)于如何利用jwt來(lái)保護(hù)你的接口服務(wù)的相關(guān)資料,需要的朋友可以參考下
    2021-08-08
  • spring boot實(shí)現(xiàn)上傳圖片并在頁(yè)面上顯示及遇到的問題小結(jié)

    spring boot實(shí)現(xiàn)上傳圖片并在頁(yè)面上顯示及遇到的問題小結(jié)

    最近在使用spring boot搭建網(wǎng)站的過(guò)程之中遇到了有點(diǎn)小問題,最終解決方案是在main目錄下新建了一個(gè)webapp文件夾,并且對(duì)其路徑進(jìn)行了配置,本文重點(diǎn)給大家介紹spring boot實(shí)現(xiàn)上傳圖片并在頁(yè)面上顯示功能,需要的朋友參考下吧
    2017-12-12
  • 詳解Struts2動(dòng)態(tài)方法調(diào)用

    詳解Struts2動(dòng)態(tài)方法調(diào)用

    這篇文章主要介紹了詳解Struts2動(dòng)態(tài)方法調(diào)用,涉及調(diào)用方法的代碼,具有一定參考價(jià)值,需要的朋友可以了解下。
    2017-09-09

最新評(píng)論