10.2 MyBatis动态SQL 10.2.5 foreach标签
10.2 MyBatis动态SQL 10.2.5 foreach标签
关于动态SQL
另外一个常用的操作就是需要对一个集合进行遍历,通常发生在构建in
条件语句时。
xml映射
1 | <select |
foreach
标签的功能非常强大,它允许指定一个集合,声明可以用在标签体内的集合项和索引变量。它也允许指定开闭匹配的字符串以及在迭代中间放置分隔符。这个标签是很智能的,因此它不会随机地附加多余的分隔符。
接口方法
1 | List<Employee> seletEmployeeInIdList(List<Integer> ids); |
测试类
1 | public class ForEachTest { |
运行效果
DEBUG [main] ==> Preparing: SELECT * FROM tb_employee WHERE ID in ( ? , ? , ? ) DEBUG [main] ==> Parameters: 1(Integer), 2(Integer), 3(Integer) DEBUG [main] <== Total: 3 Employee [id=1, loginname=xiaoming, password=xiaoming, name=小明, sex=男, age=19, phone=123456789123, sal=9800.0, state=active] Employee [id=2, loginname=xiaowang, password=xiaowang, name=小王, sex=男, age=21, phone=123456789123, sal=6800.0, state=active] Employee [id=3, loginname=xiaoli, password=xiaoli, name=小丽, sex=女, age=23, phone=123456789123, sal=7800.0, state=active]
可以看到,执行的SQL
语句是一个in
条件语句,返回的是List
集合中的id
为1
,2
,3
的员工数据。
foreach标签解释
- 标签属性:
collection="list"
表示参数类型是List
item
当前遍历的元素index
当前遍历的下标,- 当
foreach
遍历的数list
或者数组时,index
代表就是下标, - 当
foreach
遍历map
时index
代表key
,此时item
表示value
。
- 当
open
表示前缀,在遍历开始的地方显示该字符separator
表示分割符,用于分隔每个元素close
表示结束符,遍历结束时显示
- 标签体:
#{item}
表示取出当前遍历的元素.