Mybatis:foreach標籤內傳入list為空的解決

2020-09-19 16:01:05

覆盤一下填過的坑:

mybatis中,如果不對list就行判空處理,就會出現當list為空或者list.size=0時拋異常,錯誤範例如下:

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

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

1、對list判null和判空來處理

使用mybatis進行in()判斷的時候傳入引數為List,需要判斷List是否為空了,當然可以在java程式碼中進行判斷,但是我不想每次呼叫該方法都要進行判斷,所有最好還是在mybatis的sql組態檔中判斷,設定如下:

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

2、對list判null和判空來處理(牆裂推薦

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