MyBatis的批量更新和新增

博客主要提及了批量更新和批量新增两项内容,虽未展开详细说明,但明确了核心要点为这两种批量操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

批量更新


    <!--批量更新-->
    <update id="updateBatch" parameterType="java.util.List">
        <foreach collection="list" item="item" separator=";">
            update pr_tabletwo
            set DXGCID = #{item.dxgcid,jdbcType=INTEGER},
            XH = #{item.xh,jdbcType=VARCHAR},
            FYMC = #{item.fymc,jdbcType=VARCHAR},
            FYID = #{item.fyid,jdbcType=INTEGER},
            KZLX = #{item.kzlx,jdbcType=INTEGER},
            GS = #{item.gs,jdbcType=VARCHAR},
            YJHJSFF = #{item.yjhjsff,jdbcType=VARCHAR},
            HJ = #{item.hj,jdbcType=DOUBLE},
            XGFL = #{item.xgfl,jdbcType=DOUBLE},
            JSSX = #{item.jssx,jdbcType=INTEGER}
            where id = #{item.id,jdbcType=INTEGER}
        </foreach>
    </update>

 

批量新增

 <!--批量插入-->
    <insert id="insertBatch" parameterType="java.util.List">
        <foreach collection="list" item="item" separator=";">
            insert into pr_tabletwo (id, DXGCID, XH,
                FYMC, FYID, KZLX, GS,
                YJHJSFF, HJ, XGFL, JSSX
            )
            values (#{item.id,jdbcType=INTEGER}, #{item.dxgcid,jdbcType=INTEGER},
                 #{item.xh,jdbcType=VARCHAR},#{item.fymc,jdbcType=VARCHAR}, 
                 #{item.fyid,jdbcType=INTEGER}, #{item.kzlx,jdbcType=INTEGER}, 
                 #{item.gs,jdbcType=VARCHAR},#{item.yjhjsff,jdbcType=VARCHAR}, 
                 #{item.hj,jdbcType=DOUBLE}, #{item.xgfl,jdbcType=DOUBLE}, 
                 #{item.jssx,jdbcType=INTEGER}
            )
        </foreach>
    </insert>

### 关于 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` 参数可以显著减少网络往返次数从而加快速度。对比测试显示开启该选项后执行时间大幅缩短至原来的四分之一左右。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值