批量操作要用到关键字in
,<foreach>
标签----范例:
1.集合List入参:
根据查询角色id为1和2的所有用户信息
当需要其他值时,直接在list.add()加你所要的id
//接口:
public List<User> findList(List<Integer> roleIds);
<!--mapper.xml-->
<select id="findList" resultType="User">
select * from smbms_user where userRole in
<foreach item="rid" collection="list" open="(" separator="," close=")">
#{rid}
</foreach>
</select>
//测试类
@Test
public void findList() {
SqlSession sqlSession = MyBatisUtil.createSqlSession();
UserDao userDao = sqlSession.getMapper(UserDao.class);
List<Integer> list = new ArrayList<Integer>();
list.add(1);
list.add(2);
List<User> userList = userDao.findList(list);
for(User u : userList){
System.out.println(u.toString());
}
MyBatisUtil.closeSqlSession(sqlSession);
}
2.数组array入参:
- 一个条件
//接口:
public List<User> findArray(Integer[] roleIds);
<!--mapper.xml-->
<select id="findArray" resultType="User">
select * from smbms_user where userRole in
<foreach item="rid" collection="array" open="(" separator="," close=")">
#{rid}
</foreach>
</select>
//测试类
@Test
public void findArray() {
SqlSession sqlSession = MyBatisUtil.createSqlSession();
UserDao userDao = sqlSession.getMapper(UserDao.class);
List<User> userList = userDao.findList(new Integer[]{1,2});
for(User u : userList){
System.out.println(u.toString());
}
MyBatisUtil.closeSqlSession(sqlSession);
}
- where条件增加还要筛选性别gender,select * from smbms_user where userRole=? and gender=?
//接口:
public List<User> findArray(@Param("roleIds") Integer[] roleIds
@Param("gender") Integer gender);
<!--mapper.xml-->
<select id="findArray" resultType="User">
select * from smbms_user where userRole in
<!--注意:collection里面不是array了,要放入自己起的别名-->
<foreach item="rid" collection="roleIds" open="(" separator="," close=")">
#{rid}
</foreach>
and gender=#{gender}
</select>
//测试类
@Test
public void findArray() {
SqlSession sqlSession = MyBatisUtil.createSqlSession();
UserDao userDao = sqlSession.getMapper(UserDao.class);
List<User> userList = userDao.findList(new Integer[]{1,2},1);
for(User u : userList){
System.out.println(u.toString());
}
MyBatisUtil.closeSqlSession(sqlSession);
}
3.Map入参:
上面array的举例,多个条件,其中还有数组入参,我们可以使用Map
public List<User> findMap(Map<String,Object> maps);
<!--mapper.xml-->
<select id="findMap" resultType="User">
select * from smbms_user where userRole in
<!--此时map.put("key",value)中的key与collection中对应,与#{sex}中对应-->
<!--maps.put("rids",list);-->
<!--maps.put("sex",1);-->
<foreach item="rid" collection="rids" open="(" separator="," close=")">
#{rid}
</foreach>
and gender=#{sex}
</select>
@Test
//测试类
public void findMap() {
SqlSession sqlSession = MyBatisUtil.createSqlSession();
UserDao userDao = sqlSession.getMapper(UserDao.class);
Map<String,Object> maps = new HashMap<String, Object>();
//Map里面放两个值,一个集合,一个Integer类型
List<Integer> list = new ArrayList<Integer>();
list.add(1);
list.add(2);
list.add(3);
maps.put("rids",list);
maps.put("sex",1);
List<User> userList = userDao.findMap(maps);
for(User u : userList){
System.out.println(u.toString());
}
MyBatisUtil.closeSqlSession(sqlSession);
}