Mybatisシリーズ:foreachラベル内にリストが空に転送されるソリューション

2538 ワード

1、リストにnullと空欄を判定して処理する
mybatisを使用してin()判定を行うときにパラメータがリストに入ってくる場合、リストに内容があるならまだしも、リストが空であればforeachだけでエラーが報告されるので、リストが空であるかどうかを判断するには当然javaコードで判断できるが、この方法を呼び出すたびに判断したくないので、mybatisのsqlプロファイルで判断したほうがいい.次のように構成されています.
<if test="list != null and list.size() > 0">
  _claimreview.id in
  <foreach collection="list" index="index" item="item"  open="(" separator="," close=")">  
    #{item}
  </foreach>
</if>

2、listにnullと空を判定して処理する(推奨)
<foreach collection="list" index="index" item="item" open="AND _claimreview.id IN (" separator="," close=")">
    #{item}
</foreach>

この方法では,入力されたcollection値が空の場合open内のsql文は生成されず,比較的簡潔である.