MyBatisPlus批量新增或修改执行器
@Component
public class ExecutorBatch {@Autowiredprivate SqlSessionTemplate sqlSessionTemplate;/*** 使用mybatis的BATCH模式批量新增和修改* 需要注意的是分批次入库操作,关闭自动提交。* @param mapperClazz 继承Mapper接口的类* @param operationList 操作的List* @param isUpdate 是否为更新* @param operationDbNumber 操作数据库条数* @param <T> T* @param <I> I*/public <T, I extends Mapper> void executorTypeBatch(Class<I> mapperClazz, List<T> operationList, boolean isUpdate, int operationDbNumber){SqlSession session = sqlSessionTemplate.getSqlSessionFactory().openSession(ExecutorType.BATCH, false);I mapper = session.getMapper(mapperClazz);try {for (int i = 1;i <= operationList.size(); i++) {if (isUpdate) {mapper.updateByPrimaryKeySelective(operationList.get(i-1));} else {mapper.insert(operationList.get(i-1));}if (i / operationDbNumber == 1 || i == operationList.size()) {session.commit();//清理缓存,防止溢出session.clearCache();}}} catch (Exception e) {session.rollback();} finally {session.close();}}/*** 使用mybatis的BATCH模式批量删除* 需要注意的是分批次入库操作,关闭自动提交。* @param mapperClazz 继承Mapper接口的类* @param operationList 操作的List* @param operationDbNumber 操作数据库条数* @param <T> T* @param <I> I*/public <T, I extends Mapper> void executorTypeBatchDelete(Class<I> mapperClazz, List<T> operationList, int operationDbNumber){SqlSession session = sqlSessionTemplate.getSqlSessionFactory().openSession(ExecutorType.BATCH, false);I mapper = session.getMapper(mapperClazz);try {for (int i = 1;i <= operationList.size(); i++) {mapper.delete(operationList.get(i-1));if (i / operationDbNumber == 1 || i == operationList.size()) {session.commit();//清理缓存,防止溢出session.clearCache();}}} catch (Exception e) {session.rollback();} finally {session.close();}}
}
测试类
@Beforepublic void getList() {long start = System.currentTimeMillis();Users user;for (int i = 1; i <=50000 ; i++) {user = new Users();user.setId(i);user.setName("java");user.setAge(200);user.setManagerId(222);list.add(user);}System.out.println("拼装数据 耗时:"+(System.currentTimeMillis()-start));System.out.println(list.size());}@Testpublic void batchInsert() {SqlSession sqlSession = sqlSessionFactory.openSession(ExecutorType.BATCH,false);UsersMapper mapper = sqlSession.getMapper(UsersMapper.class);System.out.println("batchInsert 插入开始========");long start = System.currentTimeMillis();for (int i = 0; i < list.size(); i++) {mapper.insert(list.get(i));if (i%5000==4999) {sqlSession.flushStatements();
// sqlSession.commit();
// sqlSession.clearCache();}}
// sqlSession.commit();
// sqlSession.clearCache();sqlSession.flushStatements();System.out.println("SqlSession 批量插入耗时:"+(System.currentTimeMillis()-start));}
MyBatisPlus批量新增或修改执行器相关推荐
- postgres批量新增,修改
项目中用到批量新增,修改,这里记录一下: 1.批量新增,当遇到冲突时,进行修改 sql: insert into table_name(id, col1) values(unnest(array[1, ...
- mybatis-plus的批量新增/批量更新以及问题
批量新增/删除 1.代码中foreach insert/update 2.多线程foreach insert/update 3.mybatis xml中foreach 4.通过自定义 SQL注入器扩展 ...
- Mybatis Plus重写批量新增和批量删除
批量新增: import com.baomidou.mybatisplus.core.injector.AbstractMethod; import com.baomidou.mybatisplus. ...
- Javaweb15==mysql+mybatis+servlet+axios+fasetjson+vue+elementUI前后端分离,实现列表后端分页、模糊查询后分页、新增、单一/批量删除、修改
难点:模糊查询后再次分页,并可以选择页数. 最终环境配置: maven3.8:依赖包管理 IDEA2021+JDK8+mysql connector java5+Mysql5+mybatis3.5:从 ...
- 上万数据批量新增/修改优化经验
上万条数据批量操作优化: 1 取消for循环,改成批量插入/修改方式,尽管代码会比较麻烦. 2 减少数据库操作,可以将数据一次性取到内存,在内存处理,代码麻烦些. 3 在批量新增的时候,将序列改为系统 ...
- Oracle数据库批量新增报异常:ORA-00001: 违反唯一约束条件(修改sequence)
项目场景: 数据进行批量新增的操作 问题描述 批量新增的时候报异常ORA-00001: 违反唯一约束 原因分析: 原因有两点: 第一点sql 第二点数据库的字段 解决方案: 我这里检查过sql没问题, ...
- 使用Elasticsearch第三方包Bboss批量提交新增、修改、删除请求
思路 使用Bboss的Http请求,核心还是ES原生的http请求接口,自己懒得写,直接使用Bboss封装好的 maven依赖 <dependency><groupId>com ...
- Mybatis-plugs 批量新增及批量修改、IN、CASE WHEN操作
1.1 基本介绍 Mybatis-plugs 批量新增及批量修改.IN.CASE WHEN 查询,简单,适用,最近用到了,那就留下点痕迹,免得下次用到再去找 <foreach> 标签里面的 ...
- MyBatis + Oracle 实现批量新增和批量修改
MyBatis + Oracle 实现批量新增(基于序列化自增长主键) mapper 接口 void batchInsert(List<ASingleProject> list); map ...
最新文章
- windows 7 可以清除的文件
- labview除了全局变量还有别的办法_地中海贫血除了移植,还有什么办法?
- 办公出口ip多个地址_如何正确分配与高效管理IP地址
- JS设计模式七:发布-订阅模式
- C#中往数据库插入/更新时候关于NUll空值的处理
- 一个小技巧助您减少if语句的状态判断
- python gil原理_Python GIL深入浅出
- 【转】CentOS 使用yum命令安装出现错误提示”could not retrieve mirrorlist http://mirrorlist.centos.org ***”...
- 树莓派能直接运行python程序_在树莓派上运行python脚本 - python
- Qt+MySQL实现数据库图书管理系统
- Java:pdf文件中添加图片
- 辩证统一和有机统一的比较
- java 区分中英文_Java 区分文本中的中英文字符函数
- 404常见的几种错误原因
- 02-AD软件基本使用第二讲(器件介绍)
- java计算机毕业设计springboot+vue度假山庄酒店管理系统
- 将站点数据插值到格点上
- 《Precise and realistic grasping and manipulation in Virtual Reality without force feedback》论文解读
- 看了 Google 大神 Jeff Dean 的传说,我拜服了~
- ACM上一些常见问题解答
热门文章
- 解决IDEA的项目管理文件报红
- 机器学习与深度学习系列连载(NTU-Machine Learning, cs229, cs231n, cs224n, cs294):欢迎进入机器学习的世界
- 案例解读 | 重蹈美国制造业空心化老路,波音数字化出了啥问题?
- Android八门神器(一):OkHttp框架源码解析 1
- VVC帧内预测(三)PDPC
- C语言判断字符串为空
- centos7万兆网卡不显示问题
- 使用四种框架分别实现1百万websocket常连接的服务器
- 推算几天后的日期 —— 代码篇
- 青岛医院计算机招聘试题及答案,2020青岛市妇女儿童医院招聘试题及答案解析...