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

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

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

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

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

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

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

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

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

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

num != null and num != ''

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

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

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

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

案例

當(dāng)使用mybatis傳入?yún)?shù)為Integer類型,使用條件構(gòu)造語句時(shí)偶爾會導(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,會導(dǎo)致條件構(gòu)造失敗;SQL執(zhí)行結(jié)果不是我們想要的

原因分析

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

源碼:

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

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

總結(jié)

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

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

最后

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

相關(guān)文章

  • 解決IDEA target文件夾越來越大的問題

    解決IDEA target文件夾越來越大的問題

    這篇文章主要介紹了解決IDEA target文件夾越來越大的問題,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-02-02
  • 詳解JAVA中獲取文件MD5值的四種方法

    詳解JAVA中獲取文件MD5值的四種方法

    這篇文章主要介紹了JAVA中獲取文件MD5值的四種方法,獲取文件MD5值主要分為三個(gè)步驟,第一步獲取文件的byte信息,第二步通過MessageDigest類進(jìn)行MD5加密,第三步轉(zhuǎn)換成16進(jìn)制的MD5碼值,需要的朋友可以參考下
    2022-08-08
  • Java 遍歷list和map的方法

    Java 遍歷list和map的方法

    這篇文章主要介紹了Java 遍歷list和map的方法,幫助大家更好的理解和使用Java,感興趣的朋友可以了解下
    2020-12-12
  • Spring事務(wù)管理方法步驟解析

    Spring事務(wù)管理方法步驟解析

    這篇文章主要介紹了Spring事務(wù)管理方法步驟解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-09-09
  • Java阻塞隊(duì)列必看類:BlockingQueue快速了解大體框架和實(shí)現(xiàn)思路

    Java阻塞隊(duì)列必看類:BlockingQueue快速了解大體框架和實(shí)現(xiàn)思路

    這篇文章主要介紹了Java阻塞隊(duì)列必看類:BlockingQueue快速了解大體框架和實(shí)現(xiàn)思路,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-10-10
  • 劍指Offer之Java算法習(xí)題精講求和篇

    劍指Offer之Java算法習(xí)題精講求和篇

    跟著思路走,之后從簡單題入手,反復(fù)去看,做過之后可能會忘記,之后再做一次,記不住就反復(fù)做,反復(fù)尋求思路和規(guī)律,慢慢積累就會發(fā)現(xiàn)質(zhì)的變化
    2022-03-03
  • Java的枚舉,注解和反射(二)

    Java的枚舉,注解和反射(二)

    今天小編就為大家分享一篇關(guān)于Java枚舉,注解與反射原理說明,小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來看看吧
    2021-07-07
  • SpringBoot整合Solr實(shí)現(xiàn)文檔檢索

    SpringBoot整合Solr實(shí)現(xiàn)文檔檢索

    Solr高度可靠、可擴(kuò)展和容錯(cuò),提供分布式索引、復(fù)制和負(fù)載平衡查詢、自動故障轉(zhuǎn)移和恢復(fù)、集中配置等,Solr 為世界上許多最大的 Internet 站點(diǎn)的搜索和導(dǎo)航功能提供支持,本文將給大家介紹SpringBoot整合Solr實(shí)現(xiàn)文檔檢索,需要的朋友可以參考下
    2023-08-08
  • Java開發(fā)實(shí)現(xiàn)人機(jī)猜拳游戲

    Java開發(fā)實(shí)現(xiàn)人機(jī)猜拳游戲

    這篇文章主要為大家詳細(xì)介紹了Java開發(fā)實(shí)現(xiàn)人機(jī)猜拳游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-08-08
  • 關(guān)于Java中重定向傳參與取值

    關(guān)于Java中重定向傳參與取值

    這篇文章主要介紹了Java中重定向傳參與取值問題,重定向不僅可以重定向到當(dāng)前應(yīng)用程序中的其他資源,還可以重定向到同一個(gè)站點(diǎn)上的其他應(yīng)用程序中的資源,甚至是使用絕對URL重定向到其他站點(diǎn)的資源,本文給大家介紹的非常詳細(xì),需要的朋友可以參考下
    2023-05-05

最新評論

尉犁县| 三门峡市| 辽宁省| 宜章县| 梅河口市| 长沙县| 门头沟区| 莱州市| 保定市| 稷山县| 正宁县| 荥阳市| 长宁县| 太仓市| 大英县| 宿迁市| 江华| 蒲城县| 丹江口市| 辽中县| 从化市| 永济市| 南郑县| 砀山县| 民乐县| 沁阳市| 修文县| 辽源市| 金门县| 巴塘县| 湄潭县| 泽普县| 巴林左旗| 濮阳市| 舒城县| 台中县| 登封市| 周至县| 深州市| 溧阳市| 土默特右旗|