Mybatis传入List实现批量更新

 Dao层写法

/**
     * 批量更新新库存
     * @param list
     * @return
     */
    int updateNewStock(@Param(value = "list") List<GreenBeanMsg> list);

xml具体实现代码

<update id="updateNewStock" parameterType="java.util.List">
        <foreach collection="list" item="bean" index="index" open="" close="" separator=";">
            UPDATE green_beans
            <set>
                stock=#{bean.stock}
            </set>
            <where>
                beanUid = #{bean.beanUid}
            </where>
        </foreach>
    </update>

注意的地方:我传入的是一个集合,于是在dao层写的方法里加上@Param(value“list”),mybatis将传入的参数看做是一个集合list了。于是,在foreach中的collectio中就要写作“list”;parameterType也定义为"java.util.List"。

注意:这种方法必须在配置连接数据库url后面带一个参数 &allowMultiQueries=true,表示允许批量操作,例 jdbc:mysql://localhost:3306/mysqlTest?characterEncoding=utf-8&allowMultiQueries=true

### 使用 MyBatis 的 `<foreach>` 标签实现批量更新MyBatis 中,可以通过 `<foreach>` 标签来处理集合类型的参数,并将其用于动态 SQL 构建。以下是基于提供的引用内容以及专业知识设计的一个完整的批量更新示例。 #### XML 配置文件中的 `<update>` 实现 以下是一个典型的批量更新配置: ```xml <update id="batchUpdate" parameterType="java.util.List"> UPDATE your_table SET column1 = (CASE id <foreach collection="list" item="item" index="index" separator=" " open="" close=""> WHEN #{item.id} THEN #{item.column1} </foreach> END), column2 = (CASE id <foreach collection="list" item="item" index="index" separator=" " open="" close=""> WHEN #{item.id} THEN #{item.column2} </foreach> END) WHERE id IN ( <foreach collection="list" item="item" open="(" separator="," close=")"> #{item.id} </foreach> ) </update> ``` 此代码片段通过嵌套的 `<foreach>` 来分别定义 `column1` 和 `column2` 的更新逻辑[^3]。外部的 `WHERE` 子句则利用另一个 `<foreach>` 动态生成符合条件的 ID 列表。 --- #### Java 接口方法签名 对应的 Mapper 接口中应声明如下方法: ```java public interface YourTableMapper { void batchUpdate(List<Item> items); } ``` 其中,`Item` 是一个简单的 POJO 类型,包含需要更新的字段(如 `id`, `column1`, `column2` 等)。 --- #### 测试数据准备 假设我们有一个名为 `your_table` 的数据库表,其结构如下: | id | column1 | column2 | |----|---------|---------| | 1 | valueA | valueX | | 2 | valueB | valueY | 如果要更新这些记录,则可以传递一个列表给上述接口方法: ```java List<Item> itemList = new ArrayList<>(); itemList.add(new Item(1, "newValueA", "newValueX")); itemList.add(new Item(2, "newValueB", "newValueY")); yourTableMapper.batchUpdate(itemList); ``` 以上代码会触发批量更新操作,将对应列的值修改为目标值[^3]。 --- #### 注意事项 1. **性能优化**:当涉及大量数据时,建议分批提交事务以减少内存占用并提高效率。 2. **SQL 注入防护**:始终使用 MyBatis 提供的安全绑定机制(即 `${}` 替代为 `#{}`),防止潜在安全风险。 3. **兼容性问题**:不同数据库可能对复杂查询的支持程度有所差异,请提前测试目标环境下的表现[^5]。 ---
评论 20
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值