Mybatis中foreach标签
时间: 2025-02-22 16:41:11 浏览: 38
### MyBatis 中 `foreach` 标签的使用方法
#### 基本语法结构
在MyBatis中,`<foreach>`标签用于遍历集合并构建动态SQL语句。基本语法如下:
```xml
<foreach collection="collection" item="item" index="index" open="(" separator="," close=")">
#{item}
</foreach>
```
此标签通过指定`collection`属性来定义要迭代的数据源,可以是数组、列表(List)或其他类型的集合对象[^2]。
#### 属性解释
- **collection**: 集合名称,在传递给Mapper接口的方法参数中定义。
- **item**: 表示当前循环项的变量名。
- **index**(可选): 当前索引位置,默认不设置也可以正常使用。
- **open** 和 **close**: 定义生成字符串前后附加的内容,通常用来包裹整个表达式的括号等符号。
- **separator**: 各元素间的分隔符,比如逗号`,`表示各成员间用逗号连接[^4]。
#### 实际应用案例展示
##### 批量查询操作
当需要根据多个ID获取记录时,可以通过`<foreach>`实现IN子句的功能:
```xml
<select id="foreach_test" parameterType="map" resultType="com.pojo.Blog">
select * from Blog
<where>
<if test="ids != null and ids.size() > 0"> <!-- 判断是否为空 -->
AND (
<foreach collection="ids" item="id" open="(" separator="OR " close=")">
id=#{id}
</foreach>
)
</if>
</where>
</select>
```
这段代码展示了如何安全地处理可能存在的空集合并防止潜在的SQL注入风险[^3]。
##### 批量删除功能
对于批量删除场景,则可以直接利用`<foreach>`构造DELETE语句内的条件部分:
```xml
<delete id="delete" parameterType="java.util.List">
DELETE FROM account WHERE id IN (
<foreach collection="list" item="id" separator=",">
#{id}
</foreach>
);
</delete>
```
这里假设传入的是一个名为`list`的字符串列表作为待删账户ID集合。
阅读全文
相关推荐



















