当前位置: 首页 > news >正文

MyBatis 批量操作 XML 实现方式

MyBatis 通过 XML 映射文件实现批量插入(insert)、更新(update)和删除(delete)的完整方案


1. 批量插入(insert)

1.1 单条SQL批量插入(推荐)

<insert id="batchInsert" parameterType="java.util.List">INSERT INTO user(name, age, email) VALUES<foreach collection="list" item="item" separator=",">(#{item.name}, #{item.age}, #{item.email})</foreach>
</insert>

1.2 批量插入并返回主键(MySQL)

<insert id="batchInsert" useGeneratedKeys="true" keyProperty="id">INSERT INTO user(name, age, email) VALUES<foreach collection="list" item="item" separator=",">(#{item.name}, #{item.age}, #{item.email})</foreach>
</insert>

1.3 批量插入(Oracle特殊语法)

<insert id="batchInsert">INSERT ALL<foreach collection="list" item="item">INTO user(id, name, age, email) VALUES(#{item.id}, #{item.name}, #{item.age}, #{item.email})</foreach>SELECT 1 FROM DUAL
</insert>

2. 批量更新(update)

2.1 使用CASE WHEN批量更新(MySQL)

<update id="batchUpdate" parameterType="java.util.List">UPDATE user<trim prefix="SET" suffixOverrides=","><trim prefix="name = CASE" suffix="END,"><foreach collection="list" item="item">WHEN id = #{item.id} THEN #{item.name}</foreach></trim><trim prefix="age = CASE" suffix="END,"><foreach collection="list" item="item">WHEN id = #{item.id} THEN #{item.age}</foreach></trim><trim prefix="email = CASE" suffix="END"><foreach collection="list" item="item">WHEN id = #{item.id} THEN #{item.email}</foreach></trim></trim>WHERE id IN<foreach collection="list" item="item" open="(" separator="," close=")">#{item.id}</foreach>
</update>

2.2 批量更新(Oracle)

<update id="batchUpdate" parameterType="java.util.List"><foreach collection="list" item="item" open="BEGIN" close=";END;" separator=";">UPDATE user SETname = #{item.name},age = #{item.age},email = #{item.email}WHERE id = #{item.id}</foreach>
</update>

3. 批量删除(delete)

3.1 普通批量删除

<delete id="batchDelete" parameterType="java.util.List">DELETE FROM user WHERE id IN<foreach collection="list" item="item" open="(" separator="," close=")">#{item.id}</foreach>
</delete>

3.2 批量删除(Oracle)

<delete id="batchDelete" parameterType="java.util.List"><foreach collection="list" item="item" open="BEGIN" close=";END;" separator=";">DELETE FROM user WHERE id = #{item.id}</foreach>
</delete>

4. 动态批量操作

4.1 动态批量插入(根据条件)

<insert id="dynamicBatchInsert">INSERT INTO user(name, age, email) VALUES<foreach collection="list" item="item" separator=","><if test="item.name != null and item.email != null">(#{item.name}, #{item.age}, #{item.email})</if></foreach>
</insert>

4.2 批量更新非空字段

<update id="batchUpdateSelective" parameterType="java.util.List">UPDATE user<trim prefix="SET" suffixOverrides=","><trim prefix="name = CASE" suffix="END,"><foreach collection="list" item="item"><if test="item.name != null">WHEN id = #{item.id} THEN #{item.name}</if></foreach></trim><trim prefix="age = CASE" suffix="END,"><foreach collection="list" item="item"><if test="item.age != null">WHEN id = #{item.id} THEN #{item.age}</if></foreach></trim></trim>WHERE id IN<foreach collection="list" item="item" open="(" separator="," close=")">#{item.id}</foreach>
</update>

5. 最佳实践建议

  1. 批量大小控制:每批处理500-1000条数据最佳

  2. 事务管理:确保批量操作在一个事务中完成

  3. JDBC参数:MySQL添加rewriteBatchedStatements=true

  4. 执行器类型:对于大量数据考虑使用ExecutorType.BATCH

  5. 错误处理:考虑分批处理,避免单批失败导致全部回滚

http://www.lryc.cn/news/608319.html

相关文章:

  • 信创应用服务器TongWeb安装教程、前后端分离应用部署全流程
  • 元宇宙重构未来交通新图景
  • linux source命令使用详细介绍
  • 空间平面旋转与xoy平行
  • Node.js中path模块的使用指南
  • QT中使用OpenCV保姆级教程
  • 1分钟临时共享空间在线小工具实现
  • 安卓自动点击器:设置点击周期 / 滑动,抢票、游戏刷日常秒会
  • 2025牛客多校第六场 D.漂亮矩阵 K.最大gcd C.栈 L.最小括号串 个人题解
  • C++入门基础(三):const引用、指针和引用的关系、inline(修饰内联函数)替代宏、nullptr代替null
  • Rust进阶-part1-智能指针概述-box指针
  • Java中Lambda 表达式的解释
  • 机器学习实战:KNN算法全解析 - 从原理到创新应用
  • 机器学习消融实验:方法论演进、跨领域应用与前沿趋势
  • 大模型(五)MOSS-TTSD学习
  • 【MATLAB】(四)函数运算
  • 【MATLAB】(五)向量
  • C语言第八章指针一
  • MybatisPlus生成代码
  • MQTT协议测试环境部署
  • MybatisPlus-自动生成代码
  • 洛谷刷题8.2
  • 【AI学习】RadioDiff:代码学习
  • 福彩双色球第2025088期篮球号码分析
  • Leetcode-141.环形链表
  • 面试-python单例模式实现
  • 谈谈WebAssembly、PWA、Web Workers的作用和场景
  • 【机器学习】两大线性分类算法:逻辑回归与线性判别分析:找到分界线的艺术
  • uniapp倒计时计算
  • InfluxDB 与 Node.js 框架:Express 集成方案(一)