@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批量新增或修改执行器相关推荐

  1. postgres批量新增,修改

    项目中用到批量新增,修改,这里记录一下: 1.批量新增,当遇到冲突时,进行修改 sql: insert into table_name(id, col1) values(unnest(array[1, ...

  2. mybatis-plus的批量新增/批量更新以及问题

    批量新增/删除 1.代码中foreach insert/update 2.多线程foreach insert/update 3.mybatis xml中foreach 4.通过自定义 SQL注入器扩展 ...

  3. Mybatis Plus重写批量新增和批量删除

    批量新增: import com.baomidou.mybatisplus.core.injector.AbstractMethod; import com.baomidou.mybatisplus. ...

  4. Javaweb15==mysql+mybatis+servlet+axios+fasetjson+vue+elementUI前后端分离,实现列表后端分页、模糊查询后分页、新增、单一/批量删除、修改

    难点:模糊查询后再次分页,并可以选择页数. 最终环境配置: maven3.8:依赖包管理 IDEA2021+JDK8+mysql connector java5+Mysql5+mybatis3.5:从 ...

  5. 上万数据批量新增/修改优化经验

    上万条数据批量操作优化: 1 取消for循环,改成批量插入/修改方式,尽管代码会比较麻烦. 2 减少数据库操作,可以将数据一次性取到内存,在内存处理,代码麻烦些. 3 在批量新增的时候,将序列改为系统 ...

  6. Oracle数据库批量新增报异常:ORA-00001: 违反唯一约束条件(修改sequence)

    项目场景: 数据进行批量新增的操作 问题描述 批量新增的时候报异常ORA-00001: 违反唯一约束 原因分析: 原因有两点: 第一点sql 第二点数据库的字段 解决方案: 我这里检查过sql没问题, ...

  7. 使用Elasticsearch第三方包Bboss批量提交新增、修改、删除请求

    思路 使用Bboss的Http请求,核心还是ES原生的http请求接口,自己懒得写,直接使用Bboss封装好的 maven依赖 <dependency><groupId>com ...

  8. Mybatis-plugs 批量新增及批量修改、IN、CASE WHEN操作

    1.1 基本介绍 Mybatis-plugs 批量新增及批量修改.IN.CASE WHEN 查询,简单,适用,最近用到了,那就留下点痕迹,免得下次用到再去找 <foreach> 标签里面的 ...

  9. MyBatis + Oracle 实现批量新增和批量修改

    MyBatis + Oracle 实现批量新增(基于序列化自增长主键) mapper 接口 void batchInsert(List<ASingleProject> list); map ...

最新文章

  1. windows 7 可以清除的文件
  2. labview除了全局变量还有别的办法_地中海贫血除了移植,还有什么办法?
  3. 办公出口ip多个地址_如何正确分配与高效管理IP地址
  4. JS设计模式七:发布-订阅模式
  5. C#中往数据库插入/更新时候关于NUll空值的处理
  6. 一个小技巧助您减少if语句的状态判断
  7. python gil原理_Python GIL深入浅出
  8. 【转】CentOS 使用yum命令安装出现错误提示”could not retrieve mirrorlist http://mirrorlist.centos.org ***”...
  9. 树莓派能直接运行python程序_在树莓派上运行python脚本 - python
  10. Qt+MySQL实现数据库图书管理系统
  11. Java:pdf文件中添加图片
  12. 辩证统一和有机统一的比较
  13. java 区分中英文_Java 区分文本中的中英文字符函数
  14. 404常见的几种错误原因
  15. 02-AD软件基本使用第二讲(器件介绍)
  16. java计算机毕业设计springboot+vue度假山庄酒店管理系统
  17. 将站点数据插值到格点上
  18. 《Precise and realistic grasping and manipulation in Virtual Reality without force feedback》论文解读
  19. 看了 Google 大神 Jeff Dean 的传说,我拜服了~
  20. ACM上一些常见问题解答

热门文章

  1. 解决IDEA的项目管理文件报红
  2. 机器学习与深度学习系列连载(NTU-Machine Learning, cs229, cs231n, cs224n, cs294):欢迎进入机器学习的世界
  3. 案例解读 | 重蹈美国制造业空心化老路,波音数字化出了啥问题?
  4. Android八门神器(一):OkHttp框架源码解析 1
  5. VVC帧内预测(三)PDPC
  6. C语言判断字符串为空
  7. centos7万兆网卡不显示问题
  8. 使用四种框架分别实现1百万websocket常连接的服务器
  9. 推算几天后的日期 —— 代码篇
  10. 青岛医院计算机招聘试题及答案,2020青岛市妇女儿童医院招聘试题及答案解析...