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

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構建的sql中where條件沒有把status字段拼接上去,但是status=1時,sql中可以看到where中有status字段。 

經(jīng)過后面找資料發(fā)現(xiàn),integer類型的字段,在mybatis中的if test 條件中,會把值為0的當成false處理,因為會將integer=0的參數(shù)默認為‘’(空串),即status=0的判斷結果為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)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關文章

  • Java 讀取外部資源的方法詳解及實例代碼

    Java 讀取外部資源的方法詳解及實例代碼

    這篇文章主要介紹了Java 讀取外部資源的方法詳解及實例代碼的相關資料,經(jīng)常有讀取外部資源的要求,如配置文件等等需要讀取,需要的朋友可以參考下
    2017-03-03
  • Java并發(fā)工具類LongAdder原理實例解析

    Java并發(fā)工具類LongAdder原理實例解析

    這篇文章主要介紹了Java并發(fā)工具類LongAdder原理實例解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-05-05
  • idea2020安裝MybatisCodeHelper插件的圖文教程

    idea2020安裝MybatisCodeHelper插件的圖文教程

    這篇文章主要介紹了idea2020安裝MybatisCodeHelper插件的方法,本文通過圖文并茂的形式給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-09-09
  • 使用spring oauth2框架獲取當前登錄用戶信息的實現(xiàn)代碼

    使用spring oauth2框架獲取當前登錄用戶信息的實現(xiàn)代碼

    這篇文章主要介紹了使用spring oauth2框架獲取當前登錄用戶信息的實現(xiàn)代碼,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-07-07
  • SpringSecurity實現(xiàn)圖形驗證碼功能的實例代碼

    SpringSecurity實現(xiàn)圖形驗證碼功能的實例代碼

    Spring Security 的前身是 Acegi Security ,是 Spring 項目組中用來提供安全認證服務的框架。這篇文章主要介紹了SpringSecurity實現(xiàn)圖形驗證碼功能,需要的朋友可以參考下
    2018-10-10
  • Java中的封裝、繼承和多態(tài),你真的都懂了嗎

    Java中的封裝、繼承和多態(tài),你真的都懂了嗎

    Java中的封裝、繼承和多態(tài)知識點是學習java必備的基礎知識,看似簡單,真正理解起來還是有一定難度的,今天小編再次通過實例代碼給大家講解java 封裝繼承多態(tài)知識,感興趣的朋友一起學習下吧
    2021-05-05
  • MyBatis Excutor 攔截器的巧妙用法

    MyBatis Excutor 攔截器的巧妙用法

    這里要講的巧妙用法是用來實現(xiàn)在攔截器中執(zhí)行額外 MyBatis 現(xiàn)有方法的用法,并提供了解決攔截Executor時想要修改MappedStatement時解決并發(fā)的問題。感興趣的朋友一起看看吧
    2017-10-10
  • 輕松掌握Java工廠模式、抽象工廠模式

    輕松掌握Java工廠模式、抽象工廠模式

    這篇文章主要幫助大家輕松掌握Java工廠模式、抽象工廠模式,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-10-10
  • java實現(xiàn)文件上傳下載至ftp服務器

    java實現(xiàn)文件上傳下載至ftp服務器

    這篇文章主要為大家詳細介紹了java實現(xiàn)文件上傳下載至ftp服務器的方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-06-06
  • java轉換時區(qū)時間過程詳解

    java轉換時區(qū)時間過程詳解

    這篇文章主要介紹了java轉換時區(qū)時間過程詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2019-11-11

最新評論

海盐县| 山西省| 分宜县| 武夷山市| 静乐县| 宿迁市| 福州市| 云南省| 汉阴县| 怀安县| 绥滨县| 红安县| 东海县| 信丰县| 长沙市| 金秀| 石台县| 南靖县| 漠河县| 曲靖市| 内丘县| 台南市| 三门县| 监利县| 格尔木市| 张掖市| 嘉善县| 东辽县| 漳州市| 庆云县| 岑巩县| 福鼎市| 松潘县| 平凉市| 肃北| 嫩江县| 和龙市| 安仁县| 钟山县| 加查县| 汕尾市|