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

Mybatis之foreach標(biāo)簽內(nèi)傳入list為空的問(wèn)題

 更新時(shí)間:2024年03月09日 15:11:13   作者:Sibylsf  
這篇文章主要介紹了Mybatis之foreach標(biāo)簽內(nèi)傳入list為空的問(wèn)題及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

foreach標(biāo)簽內(nèi)傳入list為空的問(wèn)題

復(fù)盤(pán)一下填過(guò)的坑

mybatis中,如果不對(duì)list就行判空處理,就會(huì)出現(xiàn)當(dāng)list為空或者list.size=0時(shí)拋異常,

錯(cuò)誤示例如下:

 SELECT * FROM table_xxx (NOLOCK)
WHERE id in
  <foreach collection="list" index="index" item="item"  open="(" separator="," close=")">  
    #{item}
  </foreach>

解決方案如下:(推薦第二種)

1、對(duì)list判null和判空來(lái)處理

使用mybatis進(jìn)行in()判斷的時(shí)候傳入?yún)?shù)為L(zhǎng)ist,需要判斷List是否為空了,當(dāng)然可以在java代碼中進(jìn)行判斷,但是我不想每次調(diào)用該方法都要進(jìn)行判斷,所有最好還是在mybatis的sql配置文件中判斷

配置如下:

 SELECT * FROM table_xxx (NOLOCK) WHERE isactive=1
<if test="list != null and list.size() > 0">
 id in
  <foreach collection="list" index="index" item="item"  open="(" separator="," close=")">  
    #{item}
  </foreach>
</if>

2、對(duì)list判null和判空來(lái)處理(墻裂推薦

 SELECT * FROM table_xxx (NOLOCK) 
WHERE  isActive=1
<foreach collection="list" index="index" item="item" open="AND id IN (" separator="," close=")">
    #{item}
</foreach>

mybatis foreach list特殊處理

最近做一個(gè)功能,sql要用到 IN 條件,通過(guò)list傳入IN 的值,如:

SELECT * FROM table1 WHERE id in (1,2,3)

對(duì)應(yīng)的mybatis寫(xiě)法為:

    <select id="queryByIds" resultMap="resultMap" parameterType="list">
        SELECT * FROM table1
        WHERE id
        <foreach collection="list" item="rid" open="in(" separator="," close=")">
            #{rid}
        </foreach>
    </select>

期望結(jié)果是按list的值進(jìn)行查詢。

可是,當(dāng)list為空的時(shí)候呢?

sql應(yīng)該是這樣的

SELECT * FROM table1 WHERE id in ()

直接在mysql中運(yùn)行肯定是語(yǔ)法錯(cuò)誤的。

無(wú)論如何是不會(huì)查到數(shù)據(jù)的,但mybatis又是什么策略呢?直接把這一條where條件給我忽略了…導(dǎo)致查全表數(shù)據(jù)。

這也不好說(shuō)mybatis做的好不好,算不算bug了。

既然知道套路了,就得有策略來(lái)應(yīng)對(duì)了。于是多寫(xiě)了兩個(gè)if。

    <select id="queryByIds" resultMap="resultMap" parameterType="list">
        SELECT * FROM table1
        WHERE id
        <if test="list != null and list.size() > 0">
            <foreach collection="list" item="rid" open="in(" separator="," close=")">
                #{rid}
            </foreach>
        </if>
        <if test="list == null or list.size() == 0">
            = -1
        </if>
    </select>

不算是這么上策,但也能解決問(wèn)題,當(dāng)list為空時(shí),給id賦值一個(gè)-1,保證查不到數(shù)據(jù),sql也沒(méi)有語(yǔ)法錯(cuò)誤。

總結(jié)

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

相關(guān)文章

  • JAVA時(shí)間戳-Calendar類使用(包括set,get,add方法)

    JAVA時(shí)間戳-Calendar類使用(包括set,get,add方法)

    這篇文章主要介紹了JAVA時(shí)間戳-Calendar類使用(包括set,get,add方法),具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-04-04
  • Java中對(duì)list map根據(jù)map某個(gè)key值進(jìn)行排序的方法

    Java中對(duì)list map根據(jù)map某個(gè)key值進(jìn)行排序的方法

    今天小編就為大家分享一篇Java中對(duì)list map根據(jù)map某個(gè)key值進(jìn)行排序的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-07-07
  • java 多態(tài)性詳解及常見(jiàn)面試題

    java 多態(tài)性詳解及常見(jiàn)面試題

    這篇文章主要介紹了java 多態(tài)性詳解及常見(jiàn)面試題的相關(guān)資料,這里對(duì)java 的多態(tài)性做了資料整理,并列舉常見(jiàn)的關(guān)于多態(tài)性的面試題,需要的朋友可以參考下
    2016-11-11
  • java實(shí)現(xiàn)的日期時(shí)間轉(zhuǎn)換工具類完整示例

    java實(shí)現(xiàn)的日期時(shí)間轉(zhuǎn)換工具類完整示例

    這篇文章主要介紹了java實(shí)現(xiàn)的日期時(shí)間轉(zhuǎn)換工具類,結(jié)合完整實(shí)例形式分析了java針對(duì)日期時(shí)間常見(jiàn)的轉(zhuǎn)換、計(jì)算、格式化等相關(guān)操作與封裝技巧,需要的朋友可以參考下
    2019-10-10
  • Java Spring框架簡(jiǎn)介與Spring IOC詳解

    Java Spring框架簡(jiǎn)介與Spring IOC詳解

    Spring 框架是一個(gè)輕量級(jí)的解決方案,可以一站式地構(gòu)建企業(yè)級(jí)應(yīng)用。它是為了解決 企業(yè)應(yīng)用開(kāi)發(fā)的復(fù)雜性而創(chuàng)建的。Spring 使用基本的 JavaBean 來(lái)完成以前只可能由 EJB 完成的事情。IOC 是 Inversion of Control 的縮寫(xiě),多數(shù)書(shū)籍翻譯成控制反轉(zhuǎn)
    2021-09-09
  • 基于java file 文件操作operate file of java的應(yīng)用

    基于java file 文件操作operate file of java的應(yīng)用

    本篇文章介紹了,基于java file 文件操作operate file of java的應(yīng)用。需要的朋友參考下
    2013-05-05
  • Spring?Boot在開(kāi)發(fā)過(guò)程中常用IDEA插件

    Spring?Boot在開(kāi)發(fā)過(guò)程中常用IDEA插件

    這篇文章主要為大家介紹了Spring?Boot在開(kāi)發(fā)過(guò)程中常用IDEA插件,幫助大家提高開(kāi)發(fā)工作效率,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步
    2022-03-03
  • Spring boot actuator端點(diǎn)啟用和暴露操作

    Spring boot actuator端點(diǎn)啟用和暴露操作

    這篇文章主要介紹了Spring boot actuator端點(diǎn)啟用和暴露操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-07-07
  • 淺談一個(gè)基礎(chǔ)的SpringBoot項(xiàng)目該包含哪些

    淺談一個(gè)基礎(chǔ)的SpringBoot項(xiàng)目該包含哪些

    這篇文章主要介紹了淺談一個(gè)基礎(chǔ)的SpringBoot項(xiàng)目該包含哪些,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-10-10
  • 淺談Sharding-JDBC強(qiáng)制路由案例實(shí)戰(zhàn)

    淺談Sharding-JDBC強(qiáng)制路由案例實(shí)戰(zhàn)

    本文主要介紹了淺談Sharding-JDBC強(qiáng)制路由案例實(shí)戰(zhàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-07-07

最新評(píng)論