使用foreach動態(tài)生成sql的問題

使用mybatis可以動態(tài)生成sql,當(dāng)使用foreach動態(tài)生成sql嘗嘗會遇到如下問題:
先貼代碼;

// dao層java代碼
List<Post> selectPostIn(List<Long> ids);

// xml配置文件代碼
<select id="selectPostIn" resultType="Post" parameterType="list">
            SELECT * FROM POST P WHERE ID in 
<foreach item="item" index="index" 
             collection="list" open="(" separator="," close=")"> 
           #{item} 
</foreach>
</select>

當(dāng)list為空時,生成的sql如下:

SELECT * FROM POST P WHERE ID in;

執(zhí)行后報錯,原因是in后面沒有id的數(shù)組;

解決方案1:

針對輸入的list做非空判斷,只有list!=null && list.size()>0 才執(zhí)行daoList<Post> selectPostIn(List<Long> ids);,避免sql報錯;

解決方案2:

講xml文件中的parameterType更改為map,即parameterType="map",dao層參數(shù)也改為map,具體代碼如下:

param.put("ids",List<Long> ids);
// dao層java代碼
List<Post> selectPostIn(Map<String, Object> param);

// xml配置文件代碼
<select id="selectPostIn" resultType="Post" parameterType="map">
            SELECT * FROM POST P WHERE  1=1
<if test="ids != null">
        and ID in 
        <foreach item="item" index="index" 
        collection="ids" open="(" separator="," close=")"> 
        #{item} 
</foreach>
</if>
</select>

xml文件取出param參數(shù)key=ids的值,xml對ids的值做非null判斷,當(dāng)ids存在是sql語句為SELECT * FROM POST P WHERE 1=1 and ID in (1,2,3);當(dāng)ids為null時,sql語句為```
SELECT * FROM POST P WHERE 1=1;


END;
本文為作者原創(chuàng),如需轉(zhuǎn)載請注明地址[使用foreach動態(tài)生成sql的問題](http://www.itdecent.cn/p/5f27f0991e90);
如果本文對你有所幫忙,請點個贊,您的支持是我寫作的最大動力;
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容