http://www.mybatis.org/mybatis-3/zh/dynamic-sql.html
foreach的主要用在构建in条件中,它可以在SQL语句中进行迭代一个集合。
foreach元素的属性主要有 item,index,collection,open,separator,close。
item表示集合中每一个元素进行迭代时的别名,
index指定一个名字,用于表示在迭代过程中,每次迭代到的位置,
open表示该语句以什么开始,
separator表示在每次进行迭代之间以什么符号作为分隔符,
close表示以什么结束。
foreach使用collection属性有三种情况:
1. 如果传入的是单参数且参数类型是一个List的时候,collection属性值为list
2. 如果传入的是单参数且参数类型是一个array数组的时候,collection的属性值为array
3. 如果传入的参数是多个的时候,我们就需要把它们封装成一个Map了,当然单参数也可以封装成map,实际上如果你在传入参数的时候,会把它封装成一个Map的,map的key就是参数名,所以这个时候collection属性值就是传入的List或array对象在自己封装的map里面的key 。
//可变数组
public List<Userinfos> getUserArray(Integer...rids);
//list
public List<Userinfos> getUserArrayList(List<Integer> rids);
//Map
public List<Userinfos> getUserArrayMap(Map<String,Object> rids);
1.单参数array数组的类型
<!--array-->
<select id="getUserArray" resultType="Userinfos">
select * from userinfos where userRole in
<foreach collection="array" item="rids" open="(" separator="," close=")">
#{rids}
</foreach>
</select>
2.单参数List的类型
<!--list-->
<select id="getUserArrayList" resultType="Userinfos">
select * from userinfos where userRole in
<foreach collection="list" item="rids" open="(" separator="," close=")">
#{rids}
</foreach>
</select>
3.自己把参数封装成Map的类型
<!--collection的值为ids,是传入的参数Map的key
map.put("inss",inss);
-->
<select id="getUserArrayMap" resultType="Userinfos">
select * from userinfos where userRole in
<foreach collection="inss" item="rids" open="(" separator="," close=")">
#{rids}
</foreach>
</select>
测试:
private static void all3() {
SqlSession session = MyBatisUtil.createSession();
//获得mapper接口
UsersMapper mapper = session.getMapper(UsersMapper.class);
//调用方法
List<Userinfos> list = null;
try {
//array
// list = mapper.getUserArray(1,2);
//list
// List<Integer> ins =Arrays.asList(1,3);
// list = mapper.getUserArrayList(ins);
//map
Map<String,Object> map =new HashMap<>();
//注意是个集合哦!
List<Integer> inss = Arrays.asList(1,2);
//map中存放的Value是集合
map.put("inss",inss);
list = mapper.getUserArrayMap(map);
for (Userinfos user : list
) {
System.out.println(user);
}
MyBatisUtil.closeSession(session);
} catch (Exception e) {
e.printStackTrace();
}
//
}