目录
MyBatis 动态 SQL foreach 标签
概述
MyBatis 的 foreach
标签用于在 SQL 语句中 循环遍历集合,常见于 批量操作(如批量删除、批量插入)。它允许我们动态构建 SQL 语句,从而提高开发效率。
需求分析
在 员工管理系统 中,有一个 批量删除 功能:
- 用户勾选多个员工后,点击 批量删除 按钮。
- 前端将 选中的员工 ID 列表 发送给服务端。
- 后端接收 ID 列表,并执行 批量删除 SQL 语句。
传统 SQL 方式
示例:删除 ID 为 18、19、20 的员工
delete from emp where id in (18, 19, 20);
此 SQL 语句中的 IN
语法,适用于 MyBatis foreach
进行动态拼接。
MyBatis foreach
标签的作用
通过 foreach
标签,我们可以动态构造 IN
语句,使 SQL 语句支持 批量操作,避免手写多个 OR
条件。
foreach
标签使用示例
<delete id="deleteByIds">
delete from emp
where id in
<foreach collection="ids" item="id" separator="," open="(" close=")">
#{id}
</foreach>
</delete>
关键属性解析
collection="ids"
:指定要遍历的集合,通常是方法参数的名称。item="id"
:定义遍历出的单个元素,相当于for
循环中的临时变量。separator=","
:每个元素之间使用,
号分隔。open="("
:循环开始时添加(
。close=")"
:循环结束时添加)
。
Java 代码调用示例
List<Integer> ids = Arrays.asList(18, 19, 20);
empMapper.deleteByIds(ids);
生成的 SQL 语句
delete from emp where id in (18, 19, 20);
🔹 动态拼接 IN
语句,无需手写多个 OR
条件,提升灵活性!
foreach
标签的应用场景
- 批量删除:如本案例所示,删除多个员工。
- 批量插入:一次性插入多条数据。
- 批量更新:针对多个记录进行不同的更新。
总结
foreach
标签适用于 批量操作,减少 SQL 语句的重复,提高灵活性。- 自动处理 SQL 语法问题(如
,
分隔符、()
括号等),避免 SQL 语法错误。 - 代码更简洁易维护,适用于 MyBatis 中 集合数据的动态拼接。
推荐在批量操作中使用 foreach
,以提升 SQL 语句的动态性和可读性
END
学习自:黑马程序员——JavaWeb课程