MyBatis foreachインスタンス解析


Foreachの基本構造は以下の通りです.
<foreach item="item" index="index" collection="list"
      open="(" separator="," close=")">
        #{item}
</foreach>

Item:反復を表すアイテム、#{item}は、コレクション内の対応する位置に渡された値を表します.
Index:コレクションが現在反復されている場所を示します
Open:反復開始前に追加した値
close:反復終了後に追加された値
collection:字面上の意味から1つの集合であることがわかり、それは必須であり、1つの集合を代表し、その取値は3つの場合がある.
1、list表示方法で渡されたパラメータはリストの集合である
   public List<User> getUsersByIds(List<Long> ids);
<select id="getUsersByIds" resultType="User">
  SELECT *
  FROM user
  WHERE ID in
  <foreach item="item" index="index" collection="list"
      open="(" separator="," close=")">
        #{item}
  </foreach>
</select>

2、array表現方法が伝えたパラメータは配列である
    public List getUsersByIds(Long [] ids);
<select id="getUsersByIds" resultType="User">
  SELECT *
  FROM user
  WHERE ID in
  <foreach item="item" index="index" collection="array"
      open="(" separator="," close=")">
        #{item}
  </foreach>
 </select>

3、mapのキー(key)、このkeyがmapに対応する値は1つの集合である.
public List<User> getUsersByIds(Map<String,Object> map);
<select id="getUsersByIds" resultType="User">
  SELECT *
  FROM user
  WHERE ID in
  <foreach item="item" index="index" collection="ids"
      open="(" separator="," close=")">
        #{item}
  </foreach>
 </select>

パラメータがmapの場合、マッピング文のcollectionの値idsはmapに対応するキーの値がセットまたは配列である必要があります.
我々の集合には1,3,5,7,9が含まれていると仮定する.では、上記の3つの場合の最終的な組み合わせの文は、
select * from user where ID in(1,3,5,7,9)