0、配置URL

通过连接配置url设置【&rewriteBatchedStatements=true

1、MyBatis的插入


@Testpublic void sqlSessionBatchInsert() {long start = System.currentTimeMillis();SqlSession sqlSession = sqlSessionFactory.openSession(ExecutorType.BATCH, false);try {list.stream().forEach(li -> ciawSndpriSzjdMapper.insert(li));sqlSession.commit();sqlSession.clearCache();} catch (Exception e) {e.printStackTrace();sqlSession.rollback();} finally {sqlSession.close();}System.out.println(System.currentTimeMillis() - start);}

1.2、Mybatis的插入(利用并行流)

  • parallelStream
// 控制并发数目,根据具体情况设置并发数目;
System.setProperty("java.util.concurrent.ForkJoinPool.common.parallelism", "6");

@Testpublic void sqlSessionBatchInsert() {// 控制并发数目System.setProperty("java.util.concurrent.ForkJoinPool.common.parallelism", "6");long start = System.currentTimeMillis();SqlSession sqlSession = sqlSessionFactory.openSession(ExecutorType.BATCH, false);try {list.parallelStream().forEach(li -> ciawSndpriSzjdMapper.insert(li));sqlSession.commit();sqlSession.clearCache();} catch (Exception e) {e.printStackTrace();sqlSession.rollback();} finally {sqlSession.close();}System.out.println(System.currentTimeMillis() - start);}

2、Mybatis Foreach标签插入

可能会出现拼接SQL过长的Exception

  • XML
  <insert id="insertList">insert into ciaw_sndpri_szjd (id, pbi_id, number_interpret,relative_position, instruction) values<foreach collection="list" separator="," item="item">(#{item.id,jdbcType=VARCHAR},#{item.pbiId,jdbcType=VARCHAR},#{item.numberInterpret,jdbcType=VARCHAR},#{item.relativePosition,jdbcType=VARCHAR},#{item.instruction,jdbcType=VARCHAR})</foreach></insert>
  • 测试类
   @Test@Transactionalpublic void xmlForeachInsert(){long start = System.currentTimeMillis();ciawSndpriSzjdMapper.insertList(list);System.err.println(System.currentTimeMillis() - start);}

3、JDBC原生批量插入

@AutowiredDataSource dataSource;/*** 500条jdbc原生批量插入* 1.193s* 5000条jdbc原生批量插入* 2.795s  |   3.139* 100W 条 453.233  7分钟*/@SneakyThrows@Testpublic void jdbcBatchInsert(){long start = System.currentTimeMillis();String sql = "insert into ciaw_sndpri_szjd (id, pbi_id, number_interpret, relative_position, instruction) values (?, ?, ?, ?, ?)";Connection conn = null;PreparedStatement ps = null;try {conn = DataSourceUtils.getConnection(dataSource);conn.setAutoCommit(false);ps = conn.prepareStatement(sql);for (int i = 0; i < list.size(); i++) {ps.setString(1, list.get(i).getId());ps.setString(2, list.get(i).getPbiId());ps.setString(3, list.get(i).getNumberInterpret());ps.setString(4, list.get(i).getRelativePosition());ps.setString(5, list.get(i).getInstruction());ps.addBatch();if (i % 500 == 0) {ps.executeBatch();ps.clearBatch();}}ps.executeBatch();ps.clearBatch();conn.commit(); //所有语句都执行完毕后才手动提交sql语句} catch (SQLException e) {conn.rollback();e.printStackTrace();}finally {DataSourceUtils.releaseConnection(conn, dataSource);}System.err.println(System.currentTimeMillis() - start);}

【Mybatis】批量插入的多种方式相关推荐

  1. Mybatis批量插入3种方式

    前言 数据库使用的mysql,jdk版本1.8,springboot环境,   需要注意的是我们测试的单条sql比较短 max_allowed_packet指代mysql服务器端和客户端在一次传送数据 ...

  2. 批量插入数据库语句java_java相关:MyBatis批量插入数据到Oracle数据库中的两种方式(实例代码)...

    java相关:MyBatis批量插入数据到Oracle数据库中的两种方式(实例代码) 发布于 2020-7-22| 复制链接 本文通过实例代码给大家分享了MyBatis批量插入数据到Oracle数据库 ...

  3. Mybatis批量插入数据的两种方式

    总体描述 软件开发过程中需要批量插入数据的场景有几种: 从离线文件(excel, csv等)导入大批量数据到系统. 从其它系统定时或者人工同步大批量数据到系统. 程序自身的某些算法执行时会生成大批量数 ...

  4. oracle批量插入报错,[数据库]Mybatis 批量插入数据 关于Oracle 批量插入报错:ORA

    [数据库]Mybatis 批量插入数据 关于Oracle 批量插入报错:ORA 0 2020-08-19 08:00:06 Mybatis 批量插入数据 关于Oracle 批量插入报错:ORA-009 ...

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

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

  6. MyBatis批量插入(sqlserver BULK INSERT)

    MyBatis批量插入: 1. foreach方式 2.sqlsession + sqlsession.flushStatements方式: //        SqlSession sqlSessi ...

  7. MyBatis - 批量插入

    由于MyBatis的本质是对JDBC的封装,所以从JDBC的原生来看此问题~ 一.原生JDBC插入两种方式 conn.setAutoCommit(false); //设置手动提交 //预编译sql对象 ...

  8. mybatis批量插入(insert)和批量更新(update)

    文章目录 一.Mybatis批量插入 二.批量更新 前言:这两天在做mybatis批量插入和更新的时候,对这块不是很清楚,所以今天写篇文章,巩固加深印象. 一.Mybatis批量插入 批量插入的sql ...

  9. Mybatis 批量插入报ORA-00933: SQL 命令未正确结束

    Mybatis 批量插入报ORA-00933: SQL 命令未正确结束 错误出现的场景是这样的,将多个月份的1000条数据分别插入到各月份表中. MySQL中,批量插入数据到表,会在一定程度提高效率. ...

最新文章

  1. pythonfor循环案例教程_python开发之for循环操作实例详解,pythonfor实例详解
  2. python文件操作二
  3. oracle 11g ORA-12541: TNS: 无监听程序 (DBD ERROR: OCIServerAttach)
  4. 简单暴力到dp的优化(萌新篇)
  5. 安卓模拟器不能上网时可尝试更改成谷歌DNS
  6. c语言银行系统个人心得,c,,银行管理实验报告心得体会.docx
  7. 牛客练习赛30: D. 消消乐(二分匹配+输出最小点覆盖)
  8. 如何减小Exe, DLL 的大小
  9. python接口在哪里_在Python中实现接口?
  10. 阿里云技术专家入选Apache Member;百度Q1财报:营收241亿元;华为面向全球发布AI-Native数据库……...
  11. 51单片机-矩阵键盘
  12. 技术文化和惨淡命运 —— 怀念中国雅虎----转载
  13. 计算机打印机图标删除吗,故障之:打印图标消失及打印任务无法取消
  14. 1056. Confusing Number
  15. do_bootm 分析
  16. 数字练习_为什么要练习数字简约
  17. python如何限制字符串长度_python如何修改字符串长度
  18. Java面试题中高级,nasdocker有啥好玩的
  19. decimal与decimal?的区别
  20. 趣味算法图解,高清无码图免费下载

热门文章

  1. Uber将带领科技公司进入金融圈
  2. python3 成绩排名
  3. 数据分析师CDA认证 Level Ⅰ笔记(完结)
  4. sas硬盘安装linux,Intel SAS RAID安装CentOS 5.4 Linux操作系统的方法
  5. 开源的在线答题小程序分享
  6. 土豆案列(改了图片)
  7. Springboot毕业设计毕设作品,校园教务排课系统 开题报告
  8. 2019年4月份整理的Unity3D游戏完整源码
  9. YUI3 event-base
  10. canvas实现放大镜功能