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

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ù)盤一下填過(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寫法為:

    <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ì)了。于是多寫了兩個(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)文章

最新評(píng)論

公安县| 宜章县| 禹州市| 绥江县| 博客| 江华| 舟山市| 汤阴县| 上饶县| 东乡族自治县| 漳浦县| 固安县| 常宁市| 塔城市| 浦北县| 黄山市| 达日县| 阳春市| 潮州市| 漳平市| 集贤县| 镇平县| 方正县| 镇康县| 阿克苏市| 平远县| 乌苏市| 佛坪县| 沁阳市| 共和县| 南宁市| 岱山县| 莱阳市| 东乌| 阜宁县| 墨竹工卡县| 剑川县| 清徐县| 同心县| 股票| 惠来县|