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),这个key在map中对应的值是一个集合。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)