mysql mapper.xml中 批量更新

  <update id="batchUpdate" parameterType="java.util.List">
    UPDATE
        product
    SET remainder_cansale_rushbuy_store = 
        CASE
        <foreach collection="list" item="item" index="index">
              WHEN id = #{item.id} THEN  #{item.remainderCansaleRushbuyStore}
        </foreach>
        END
    WHERE 
        id IN
            <foreach collection="list" index="index" item="item" open="("separator="," close=")">
                #{item.id}
            </foreach>
  </update>

 

Spring Boot结合MyBatis处理大规模数据库批量更新(例如千万级别的数据),通常会涉及以下几个步骤: 1. **配置MyBatis**:首先,你需要在MyBatis的`mybatis-spring.xml`配置文件中启用`batchProcessing`属性,这将允许MyBatis以批处理的方式执行SQL语句。 ```xml <configuration> <insert batchSize="500" parameterType="com.example.YourEntity"> ... <!-- Your SQL statement for update --> </insert> </configuration> ``` 这里,`batchSize`决定了每次发送到数据库的数据量。 2. **实体类设计**:创建一个包含所有需要更新字段的实体类,并设置一个List来保存待更新的数据。 ```java public class UpdateData { private List<YourEntity> dataList; // getters and setters } ``` 3. **Mapper接口和XML映射**:编写Mapper接口,声明一个批处理插入方法,并在XML映射文件中指定批处理操作。 ```java // Mapper.java @Mapper public interface UpdateMapper { @Batch(batchSize = 1000) // 可调整大小 int[] batchUpdate(UpdateData data); } // mapper.xml (假设YourEntity有个id作为主键) <select id="batchUpdate" parameterType="com.example.UpdateData"> UPDATE your_table SET column1 = #{dataList[0].column1}, column2 = #{dataList[0].column2} WHERE id IN <foreach item="item" index="index" collection="dataList" open="(" separator="," close=")"> #{item.id} </foreach> </select> ``` 4. **服务层调用**:在Spring Boot的服务层,你可以注入Mapper并调用批处理方法。 ```java @Service public class DataService { @Autowired private UpdateMapper updateMapper; public void updateMassiveData(UpdateData data) { int[] result = updateMapper.batchUpdate(data); if (result.length > 0) { // 处理结果 } } } ``` **注意事项**: - 批量更新可以减少网络I/O次数,提高性能,但依然需要注意内存消耗,尤其是当数据量非常大时。 - 更新前最好先预计算好主键值,避免全表扫描。 - 如果数据有并发修改,可能需要额外考虑锁定策略和事务管理。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值