关于动态SQL另外一个常用的操作就是需要对一个集合进行遍历,通常发生在构建IN条件语句时。

<select id="selectEmployeeIn" resultType="cn.mybatis.domain.Employee">
SELECT * FROM tb_employee WHERE ID in
<foreach item="item" index="index" collection="list"
open="(" separator="," close=") ">
#{item}
</foreach>
</select>

foreach元素的功能非常强大,它允许指定一个集合,声明可以用在元素体内的集合项和索引变量。它也允许指定开闭匹配的字符串以及在迭代中间放置分隔符。这个元素是很智能的,
因此它不会随机地附加多余的分隔符。

// 根据传入的id集合查询员工
List<Employee> selectEmployeeIn(List<Integer> ids);
selectEmployeeIn方法传入的参数是一个List集合,该集合中的每一个Integer元素表示需要查询的员工的id。

public void testSelectEmployeeIn(sqlSession session){
EmployeeMapper em = session.getMapper(EmployeMapper.class);
// 创建List集合
List<Integer> ids = new Arraylist<Integer>();
// 往List集合中添加两个测试数据
ids.add(1);
ids.add(2);
List<Employee> 1ist = em.selectEmployeeIn(ids);
list.forEach(employee->System.out.println(employee));
}
测试selectEmployeeln方法,控制台显示如下:
DEBUG [main]==> Preparing: SELECT * FROM tb employee WHERE ID in( ? , ? )
DEBUG [main]==> Parameters: 1(Integer) , 2 (Integer)
DEBUG [main]<== Total: 2
Employee [id=1,loginname=jack,password=123456,name=杰克,sex=男,age=26,phone=13902019999,sal=9800.0,state=ACTIVE]
Employee [id=2,loginname=rose,password=123456,namem露丝,sex=女,age=21,phone=13902018888,sal=6800.0,state=ACTIVE]
可以看到,执行的sql语句是一个in条件语句,返回的是List集合中的id的员工数据。

标签: none

添加新评论