Mybatis foreach遍历

情景:进行用户的批量删除

>思路一

获取的要删除的用户的id,在dao层进行遍历这些id,每次都执行一次 delete from user where id=?;语句

这样的效率很低;

>思路二

获取的要删除的用户的id,在dao层使用 'in' 或者 'or' 将这些id拼接到一个SQL语句; 

delete from user where id in(1,3,5,7);

delete from user where id ='1' or id ='3' or id ='5' or id ='7';

>思路三(Mybatis的foreach遍历)

以查询为例进行展示foreach:

由于要对集合进行判空,遍历操作,将集合封装在一个对象中传入。

输入映射对象:

public class UserIds {
	private List idList=null;

	public List getIdList() {
		return idList;
	}

	public void setIdList(List idList) {
		this.idList = idList;
	}
}

mapper配置:

 

foreach标签用于遍历传入的集合,属性如下:

  • collection:指定要遍历的集合对象
  • item:定义标识指向每次遍历时得到的对象
  • open:开始遍历时要拼接的字符串
  • close:结束遍历时要拼接的字符串
  • separator:遍历两个对象中间要拼接的字符串

 

mapper接口:

public interface UserMapper {

	public List queryUserByIds(UserIds userids) throws Exception;
}

测试类:

@Test
	public void queryUserByIds() throws Exception{
		UserIds userids=new UserIds();
		List idList=new ArrayList<>();
		idList.add(6);
		idList.add(7);
		userids.setIdList(idList);
		
		UserMapper mapper=session.getMapper(UserMapper.class);
		List list=mapper.queryUserByIds(userids);
		for (User User : list) {
			System.out.println(User);
		}
		session.close();
	}

 

你可能感兴趣的:(SSM)