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

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

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

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

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

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

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

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

以下圖為出錯時的語句:

<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 類型的坑

當POJO中的屬性類型為 Integer 時,傳入 0,此時在 xxxMapper.xml的 if 判斷中總是不能滿足條件,進而導致查詢條件無效,這是因為 mybatis 針對 integer 類型的 0 進行了特殊處理,當成了 ‘’ 來處理,進行如下判斷即可:

payStatus 為 Integer 類型

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

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

相關(guān)文章

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

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

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

    深入java垃圾回收的詳解

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

    Mybatis中的@Select、foreach用法

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

    簡單了解JAVA NIO

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

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

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

    Java GZIP壓縮與解壓縮代碼實例

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

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

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

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

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

    Java貪吃蛇游戲完善版

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

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

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

最新評論