mybatis之foreach标签

mybatis之foreach标签

作用:foreach可以遍历对象,集合,数组,map等;

当传入参数为数组或者集合时需要通过<foreach></foreach>标签进行遍历。

<foreach collection="list" index="index" item="item" open="(" separator="," close=")">
#{item}
 </foreach>
属性名称作用
collection指定输入对象中集合属性
index当迭代对象是数组,列表时,表示的是当前迭代的次数
item每次遍历生成的对象
open开始遍历时拼接的串
separator遍历完一次后,在末尾添加的字符等
close结束遍历时两个对象需要拼接的串

实例代码:

入参为集合或数组类型

  1. 首先在Mapper中定义一个集合或者数组

    void updateProductRateByIds(List<String> list);

  2. 在xml映射文件中

    <update id="updateProductRateByIds">
        UPDATE product_rate_level SET
        del_flag = 1
        WHERE id IN
        <foreach collection="list" index="index" item="item" open="(" separator="," close=")">
          #{item}
        </foreach>
      </update>
    

入参为实体类型

同理,也可以定义一个实体类型的入参,实体的某个字段是一个集合或数组,遍历的时候直接取集合中实体的字段即可,如:

void updateProductInfoByIds(List<PlatfProductInfo> list);

<foreach collection="list" index="index" item="item" open="(" separator="," close=")">
        #{item.id}
</foreach>

PlatfProductInfo定义:

@Data
public class PlatfProductInfo{

    private String id;
    
}
### 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集合。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值