背景

经常的我们需要利用MyBatis批量保存或插入数据到数据库,解释一下,这里的保存或插入指的是如果数据库根据主键或唯一索引找不到这条记录,则将这条记录插入数据库,如果可以找到,就更新这条记录

其实MyBatisPlus可以实现,但对于复杂的业务也不容易写代码,今天就来讲讲MyBatis的方式如何实现这一业务

方案

先处理处理数据

首先在要插入数据库的数据量比较大时,我们使用org.apache.commons.collections4的ListUtils的partition方法将list进行拆分成多个subList,分批插入数据库

List<List<StaCharRealTimeDevDto>> listList =
ListUtils.partition(collect, Constant.DB_BATCH_INSERT_SIZE);

然后利用list的forEach方法遍历list分批插入数据

List<List<StaCharRealTimeDevDto>> listList =
ListUtils.partition(collect, Constant.DB_BATCH_INSERT_SIZE);if (CollectionUtils.isNotEmpty(listList)) {listList.forEach(tempList -> {staCharRealTimeDevMapper.saveOrUpdateBatch(tempList);});
}

再利用MyBatis保存或更新

方案1

<insert id="saveOrUpdateBatch" parameterType="list">replace into t_realtime_dev_status (id,dev_id,...) values <foreach collection="tempList" item="item" open="" close="" separator=",">(#{item.id},#{item.devId},...)</foreach>
</insert>

方案2

<insert id="saveOrUpdateBatch" parameterType="list">insert into t_sta_char_highway_day (id,rec_date,...) values<foreach collection="entityList" item="item" index="index" separator=",">(#{item.id},#{item.recDate},...)</foreach>ON DUPLICATE KEY UPDATEid = values(id), rec_date = values(rec_date),...
</insert>

Mybatis批量保存或更新数据相关推荐

  1. 一招教你数据仓库如何高效批量导入与更新数据

    摘要:GaussDB(DWS)支持的MERGE INTO功能,可以同时进行大数据量的更新与插入.对于数据仓库是一项非常重要的技术. 本文分享自华为云社区<一招教你如何高效批量导入与更新数据> ...

  2. 【SpringBoot项目中使用Mybatis批量插入百万条数据】

    SpringBoot项目中使用Mybatis批量插入百万条数据 话不多说,直接上代码,测试原生批处理的效率 开始测试 背景:因为一些业务问题,需要做多数据源,多库批量查询.插入操作,所以就研究了一下. ...

  3. 一招教你如何高效批量导入与更新数据

    一招教你如何高效批量导入与更新数据 前言 如果有一张表,我们既想对它更新,又想对它插入应该如何操作? 可以使用 UPDATE 和 INSERT 完成你的目标. 如果你的数据量很大,想尽快完成任务执行, ...

  4. MyBatis批量保存数据

    一 .思路 1.首先创建一个实体类(TestEntity),对应批量保存的一条数据 2.Controller获取前台传递的数据(是Map列表,即代码中的paramMapList) 3.Service对 ...

  5. list mybatis批量保存_mybatis 批量将list数据插入到数据库的实现

    随着业务需要,有时我们需要将数据批量添加到数据库,mybatis提供了将list集合循环添加到数据库的方法.具体实现代码如下: 1.mapper层中创建 insertForeach(List < ...

  6. list mybatis批量保存_如何实现mybatis批量将list数据插入到数据库

    如何实现mybatis批量将list数据插入到数据库 发布时间:2020-07-06 14:27:59 来源:亿速云 阅读:66 作者:清晨 小编给大家分享一下如何实现mybatis批量将list数据 ...

  7. EF Core中高效批量删除、更新数据的Zack.EFCore.Batch发布三个新特性

    Zack.EFCore.Batch是一个支持在Entity Framework Core中高效删除和更新数据的开源库.我们知道,EF Core中不支持高效的删除和更新数据,所有的更新和操作都是逐条数据 ...

  8. 批量插入或更新数据(MyBatis-plus框架)

    目录 1.场景说明 2.DUPLICATE 和REPLACE比较 3.批量插入或者更新(两种方式) 方式一:mybatis-plus的saveOrUpdateBatch方法 问题:如果操作类集成了基础 ...

  9. 公司新来个同事,MyBatis批量插入10w条数据仅用2秒,拍案叫绝!

    批量插入功能是我们日常工作中比较常见的业务功能之一,今天咱们来一个 MyBatis 批量插入的汇总篇,同时对 3 种实现方法做一个性能测试,以及相应的原理分析. 先来简单说一下 3 种批量插入功能分别 ...

  10. list mybatis批量保存_springboot2.x基础教程:集成mybatis最佳实践

    前面文章介绍过SpringBoot结合Jpa实现对数据库的操作.今天介绍下SprigBoot集成Mybatis的相关知识点.     Mybatis作为一个半自动化的ORM框架,根据条件动态拼接SQL ...

最新文章

  1. Ext学习-前后交互模式介绍
  2. 2fsk基于matlab的仿真,基于matlab的2ask、2psk、2fsk的仿真
  3. UA MATH564 概率论 多元随机变量的变换 理论与应用1
  4. 线程调度、公平锁和非公平锁、乐观锁和悲观锁、锁优化、重入锁
  5. JVM工作原理和特点
  6. c#中计算三角形面积公式_看着有点迷的三角形面积计算
  7. python的按钮控件_python实现360皮肤按钮控件示例
  8. access没有使用 对象的必要权限_厨房有没有必要安燃气报警器 使用燃气要注意哪些安全性措施...
  9. HDU2563 统计问题【递推+打表】
  10. smarty capture使用
  11. ASC2BCD及奇偶校验位
  12. 北京地区的汉代古驿道粗探
  13. Android 11源码 修改系统App后进行编译
  14. 萬惡淫為首,百善孝為先
  15. 微信群控系统的实现原理,微信群控系统源码的核心实现代码
  16. 关于this、getContext()、getActivity()、getApplication()、getApplicationContext()的区别
  17. 一个有潜在危险的要求。从客户端中检测到(ctl00$ $ $ contentplaceholder2submit1
  18. 盘点2011电子商务七宗“最”和行业十大动态
  19. python动物书系列电子_晒书名:已收藏O'Reilly出版社‘动物世界’系列图书(二)...
  20. 洛谷P1034矩形覆盖题解--zhengjun

热门文章

  1. Web基础配置篇(九): 抓包工具的介绍、安装及基本使用
  2. ThinkPHP 5.1+全开源带后台商城小程序源码程序+带详细安装使用文档
  3. android手机抓包工具 tcp协议,Android常用抓包工具之TcpDump
  4. java期末考试试卷及答案文库_《java语言程序设计》期末考试试题及答案(题库超级大全-应考必备)java考试题必从中出...
  5. 【Java】使用Java实现爬虫
  6. UniX和类UNIX系统入侵检测方法
  7. 汇编语言 王爽 第四版 实验2
  8. 黑马程序员java整套视频地址 javaweb+ssh+ssm视频+源码+软件
  9. DELMIA软件物流仿真:带曲线转角输送带输送物料的仿真操作方法
  10. 给vc6对话框添加菜单