MyBatis foreach实例解析

Foreach的基本结构以下:java

<foreach item="item" index="index" collection="list"
      open="(" separator="," close=")">
        #{item}
</foreach>

Item:表示迭代的项,#{item}表明是传进来集合中相应位置的值sql

Index:表示集合如今迭代的位置数组

open:迭代开始以前添加的值spa

close:迭代结束以后添加的值code

collection:从字面上的意思就能够看出来是一个集合,它是必须有的,它表明着一个集合,它的取值有3种状况。get

一、  list 表示方法传进来的参数是一个List集合it

   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>

二、  array表示方法传进来的参数是一个数组io

    public List<User> getUsersByIds(Long [] ids);class

<select id="getUsersByIds" resultType="User">
  SELECT *
  FROM user
  WHERE ID in
  <foreach item="item" index="index" collection="array"
      open="(" separator="," close=")">
        #{item}
  </foreach>
 </select>

三、  map的键(key),这个keymap中对应的值是一个集合。foreach

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)