mybatis批量新增,批量更新

本文详细介绍使用MyBatis进行批量插入和更新操作的方法,包括具体的XML映射文件配置和SQL语句,适用于大量数据处理场景,提高数据库操作效率。

批量新增

int batchInsertEntity(List<CardProductOrderRelation> list);
	<insert id="batchInsertEntity" useGeneratedKeys="true" keyProperty="id">
       insert into card_product_order_relation(order_id,order_code,
       card_number,card_password,amount,discount,status,create_time,create_by) values
       <foreach item="item" index="index" collection="list" separator=",">
           (#{item.orderId},#{item.orderCode},#{item.cardNumber},#{item.cardPassword},#{item.amount},#{item.discount},#{item.status},sysdate(),#{item.createBy})
       </foreach>
   </insert>

批量更新

 <update id="batchUpdateEntity">
        update card_product_order u
        <trim prefix="set" suffixOverrides=",">
            <trim prefix="success_amount =case" suffix="end,">
                <foreach collection="list" item="i" index="index">
                    <if test="i.successAmount!=null">
                        when id=#{i.id} then #{i.successAmount}
                    </if>
                </foreach>
            </trim>
            <trim prefix=" actual_amount =case" suffix="end,">
                <foreach collection="list" item="i" index="index">
                    <if test="i.actualAmount!=null">
                        when id=#{i.id} then #{i.actualAmount}
                    </if>
                </foreach>
            </trim>
            <trim prefix=" actual_balance =case" suffix="end,">
                <foreach collection="list" item="i" index="index">
                    <if test="i.actualBalance!=null">
                        when id=#{i.id} then #{i.actualBalance}
                    </if>
                </foreach>
            </trim>
            <trim prefix=" success_count =case" suffix="end,">
                <foreach collection="list" item="i" index="index">
                    <if test="i.successCount!=null">
                        when id=#{i.id} then #{i.successCount}
                    </if>
                </foreach>
            </trim>
            <trim prefix=" fail_count =case" suffix="end,">
                <foreach collection="list" item="i" index="index">
                    <if test="i.failCount!=null">
                        when id=#{i.id} then #{i.failCount}
                    </if>
                </foreach>
            </trim>
        </trim>
        where id in
        <foreach collection="list" index="index" item="i" separator="," open="(" close=")">
            #{i.id}
        </foreach>
    </update>
### 关于 MyBatis 批量插入或更新 #### 使用 MyBatis Plus 进行批量插入 MyBatisPlus 对 MyBatis批量操作进行了封装,简化了开发流程并提高了性能。下面是一个使用 `saveBatch` 方法进行批量插入的例子: ```java @Test void mybatisPlusBatchInsert() { LocalDateTime start = LocalDateTime.now(); List<User> userList = prepareUserList(); // 准备要插入的数据列表 userService.saveBatch(userList, 2000); // 设置每批次提交大小为2000条记录 log.info("MyBatisPlus 批量插入耗时:" + Duration.between(start, LocalDateTime.now()).toString()); } ``` 此代码展示了如何利用 MyBatisPlus 提供的 `saveBatch` 方法来高效地完成大批量数据的插入工作[^1]。 #### 自定义 SQL 实现批量更新 对于更复杂的场景,比如需要实现批量更新而非简单的插入,则可以通过编写自定义的 XML 映射文件中的 `<update>` 标签配合循环语句来达成目的。这里给出一个基本框架作为参考: ```xml <update id="batchUpdateUsers"> UPDATE user SET status = CASE id <foreach collection="list" item="item" index="index" separator=""> WHEN #{item.id} THEN #{item.status} </foreach> END, name = CASE id <foreach collection="list" item="item" index="index" separator=""> WHEN #{item.id} THEN #{item.name} </foreach> END WHERE id IN ( <foreach collection="list" item="item" open="(" close=")" separator="," item="item.id"/> ) </update> ``` 这段XML片段说明了怎样构建一条能够一次性处理多个对象属性变更的SQL命令[^2]。 #### 配置优化建议 为了进一步提升批处理效率,在数据库连接池配置中启用 JDBC 的 `rewriteBatchedStatements=true` 参数可以显著减少网络往返次数从而加快速度。对比测试显示开启该选项后执行时间大幅缩短至原来的四分之一左右。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值