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

【MyBatis批量更新实现】按照list传入批量更新

学习目标:

<update id="updateModelEngineeringSpatialNode" parameterType="com.mxpt.model.manage.domain.ModelEngineeringSpatialNode">update model_engineering_spatial_node<trim prefix="SET" suffixOverrides=","><if test="adcd != null">adcd = #{adcd},</if></trim>where snode_id = #{snodeId}</update>

将上面的这个mybatis的sql改写成按照list进行批量更新,应该如何实现呢?
public int updateBatchModelEngineeringSpatialNode(@Param(“list”) List modelEngineeringSpatialNode);

学习内容:

要将单个更新改为批量更新,可以使用MyBatis的标签。以下是完整的实现代码:

Mapper接口

public interface ModelEngineeringSpatialNodeMapper {int updateBatchModelEngineeringSpatialNode(@Param("list") List<ModelEngineeringSpatialNode> modelEngineeringSpatialNode);
}

XML映射文件

<update id="updateBatchModelEngineeringSpatialNode" parameterType="list"><foreach collection="list" item="item" index="index" open="" close="" separator=";">update model_engineering_spatial_node<trim prefix="SET" suffixOverrides=","><if test="item.adcd != null">adcd = #{item.adcd},</if></trim>where snode_id = #{item.snodeId}</foreach>
</update>

注意事项:

这种批量更新方式实际上是发送多条单独的UPDATE语句,但在一个数据库会话中执行

需要在JDBC连接URL中添加allowMultiQueries=true参数以支持多条SQL语句执行

如果列表很大,可能需要分批处理以避免性能问题

数据量大分批执行:

ServiceImpl模块进行分批执行,数据量较大时,每1000条数据作为一个批次:

/*** 批量节点更新** @param list 需要更新的节点list* @return 结果*/public int updateBatchModelEngineeringSpatialNode(List<ModelEngineeringSpatialNode> list){//由于数据库对于插入字段的限制,在这里对批量插入的数据进行分批处理int num = 0;int batchCount = 1000;for (int i = 0; i < list.size(); i += batchCount) {int end = Math.min(i + batchCount, list.size());num += modelEngineeringSpatialNodeMapper.updateBatchModelEngineeringSpatialNode(list.subList(i, end));}return num;}
http://www.dtcms.com/a/329584.html

相关文章:

  • java中数组和list的区别是什么?
  • 如何生成.patch?
  • 旧版MinIO的安装(windows)、Spring Boot 后端集成 MinIO 实现文件存储(超详细,带图文)
  • Spring Boot 3 连接池最大连接数设置建议
  • HTTP 协议详细介绍
  • Spring事务管理实战:从注解到进阶
  • SQL 查询慢?先从 EXPLAIN 看起
  • 可视化调试LangChain SQLChatMessageHistory:SQLite数据库查看全攻略
  • 智算赋能:移动云助力“世界一流数据强港”建设之路
  • 什么是内外网文件传输?如何确保文件在内外网间安全、高效地传输呢?
  • 层次视觉 Transformer 与分布级特征精炼:面向多模态疾病诊断与机器遗忘的深度学习框架研究
  • [idekCTF 2025] diamond ticket
  • C#自定义日期时间选择器
  • 2025 电赛 C 题完整通关攻略:从单目标定到 2 cm 测距精度的全流程实战
  • C++编程学习(第22天)
  • k8s资源管理
  • 集成电路学习:什么是CV计算机视觉
  • 加密界的“瑞士军刀“-----VeraCrypt 加密原理与实操
  • 【数据结构】——栈(Stack)的原理与实现
  • iscc2025决赛wp
  • Redis面试精讲 Day 20:Redis大规模部署性能调优
  • MCP协议更新:从HTTP+SSE到Streamable HTTP,大模型通信的进化之路
  • [Oracle数据库] ORACLE的用户维护和权限操作
  • 多模态RAG赛题实战之策略优化--Datawhale AI夏令营
  • javaswing json格式化工具
  • 何解决PyCharm中pip install安装Python报错ModuleNotFoundError: No module named ‘json’问题
  • Day 39: 图像数据与显存
  • C++ stack and queue
  • Python3:使用venv虚拟环境
  • 猫头虎AI分享:Excel MCP,让AI具备操作Excel表格|创建销售数据表、复制工作表、填充数据、写公式、绘制图表、调节颜色、添加透视表、保存为PDF