亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

mybatis的坑-integer類型為0的數(shù)據(jù)if?test失效問題

 更新時(shí)間:2022年01月14日 10:53:34   作者:liu1007735214  
這篇文章主要介紹了mybatis的坑-integer類型為0的數(shù)據(jù)if?test失效問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

integer類型為0的數(shù)據(jù)if test失效

mybatis的where動(dòng)態(tài)判斷語句if test 遇到tinyint類型為0的數(shù)據(jù)失效

發(fā)現(xiàn)一個(gè)mybatis的坑,有個(gè)支付表,通過狀態(tài)去篩選已支付/未支付的數(shù)據(jù),支付狀態(tài)用status字段表示,status=0表示未支付,status=1表示已支付,且status類型為Integer。當(dāng)選擇已支付即status=1時(shí),可以篩選成功已支付的數(shù)據(jù)列表,但是當(dāng)選擇未支付即status=0時(shí),查出來的數(shù)據(jù)是未支付和已支付的所有數(shù)據(jù)。

此時(shí)就有點(diǎn)懵逼了,后面debug一層層去追蹤,發(fā)現(xiàn)status=0時(shí),mybatis構(gòu)建的sql中where條件沒有把status字段拼接上去,但是status=1時(shí),sql中可以看到where中有status字段。 

經(jīng)過后面找資料發(fā)現(xiàn),integer類型的字段,在mybatis中的if test 條件中,會(huì)把值為0的當(dāng)成false處理,因?yàn)闀?huì)將integer=0的參數(shù)默認(rèn)為‘’(空串),即status=0的判斷結(jié)果為false,所以未支付的條件永遠(yuǎn)不可能出現(xiàn),查出來的數(shù)據(jù)就是所有狀態(tài)的數(shù)據(jù)。

以下圖為出錯(cuò)時(shí)的語句:

<where>
            <trim prefixOverrides="and">
                <if test="status != null and status !=''">and status=#{status}</if>
                <if test="createdDtBegin != null">and created_dt <![CDATA[ >= ]]>
                    #{createdDtBegin, jdbcType=TIMESTAMP}
                </if>
                <if test="createdDtEnd != null">and created_dt <![CDATA[ <= ]]>
                    #{createdDtEnd, jdbcType=TIMESTAMP}
                </if>
            </trim>
</where>

解決方式

改成 **<if test=“status != null”>and status=#{status, jdbcType=TINYINT}</if>

這樣即可,即把 status != ''去掉

在這里插入圖片描述

或者還有一種做法,即:

如果status為integer,<if test=“status != null and status != -1”>或者:如果status為integer,<if test=“status != null and status != ‘’ or status == 0”>

mybatis if 判斷 Integer 類型的坑

當(dāng)POJO中的屬性類型為 Integer 時(shí),傳入 0,此時(shí)在 xxxMapper.xml的 if 判斷中總是不能滿足條件,進(jìn)而導(dǎo)致查詢條件無效,這是因?yàn)?mybatis 針對(duì) integer 類型的 0 進(jìn)行了特殊處理,當(dāng)成了 ‘’ 來處理,進(jìn)行如下判斷即可:

payStatus 為 Integer 類型

<if test="payStatus != null and payStatus != '' or payStatus == 0">
? ? and a.pay_status = #{payStatus}
</if>

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

相關(guān)文章

  • springboot整合mybatis實(shí)現(xiàn)多表查詢的實(shí)戰(zhàn)記錄

    springboot整合mybatis實(shí)現(xiàn)多表查詢的實(shí)戰(zhàn)記錄

    SpringBoot對(duì)數(shù)據(jù)庫(kù)操作有多種方式,下面這篇文章主要給大家介紹了關(guān)于springboot整合mybatis實(shí)現(xiàn)多表查詢的相關(guān)資料,文中通過示例代碼以及圖文介紹的非常詳細(xì),需要的朋友可以參考下
    2021-08-08
  • 深入java垃圾回收的詳解

    深入java垃圾回收的詳解

    本篇文章是對(duì)java垃圾回收進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-06-06
  • Mybatis中的@Select、foreach用法

    Mybatis中的@Select、foreach用法

    這篇文章主要介紹了Mybatis中的@Select、foreach用法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-08-08
  • 簡(jiǎn)單了解JAVA NIO

    簡(jiǎn)單了解JAVA NIO

    這篇文章主要介紹了JAVA NIO的的相關(guān)資料,文中講解非常細(xì)致,幫助大家更好的理解和學(xué)習(xí),感興趣的朋友可以了解下
    2020-07-07
  • 如何基于springcloud模擬RPC調(diào)用(Feign)

    如何基于springcloud模擬RPC調(diào)用(Feign)

    這篇文章主要介紹了如何基于springcloud模擬RPC調(diào)用(Feign),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-04-04
  • Java GZIP壓縮與解壓縮代碼實(shí)例

    Java GZIP壓縮與解壓縮代碼實(shí)例

    這篇文章主要介紹了Java GZIP壓縮與解壓縮代碼實(shí)例,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-01-01
  • Mybatis-Plus 條件構(gòu)造器示例詳解

    Mybatis-Plus 條件構(gòu)造器示例詳解

    這篇文章主要介紹了Mybatis-Plus 條件構(gòu)造器的相關(guān)資料,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-06-06
  • RocketMQ之NameServer架構(gòu)設(shè)計(jì)及啟動(dòng)關(guān)閉流程源碼分析

    RocketMQ之NameServer架構(gòu)設(shè)計(jì)及啟動(dòng)關(guān)閉流程源碼分析

    這篇文章主要為大家介紹了RocketMQ之NameServer架構(gòu)設(shè)計(jì)及啟動(dòng)關(guān)閉流程源碼分析詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步
    2021-11-11
  • Java貪吃蛇游戲完善版

    Java貪吃蛇游戲完善版

    這篇文章主要為大家詳細(xì)介紹了Java貪吃蛇游戲完善版,支持菜單操作,鍵盤監(jiān)聽,可加速,減速,統(tǒng)計(jì)得分等功能,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-04-04
  • 解決java編譯錯(cuò)誤:程序包不存在的問題

    解決java編譯錯(cuò)誤:程序包不存在的問題

    出錯(cuò):Error:(3, 27) java: 程序包c(diǎn)om.aliyun.odps.udf不存在,遇到這樣的錯(cuò)誤問題如何解決呢,下面小編給大家?guī)砹薺ava編譯錯(cuò)誤:程序包不存在的問題及解決方法,感興趣的朋友一起看看吧
    2023-05-05

最新評(píng)論