【Mybatis】批量插入的多种方式
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】批量插入的多种方式相关推荐
- Mybatis批量插入3种方式
前言 数据库使用的mysql,jdk版本1.8,springboot环境, 需要注意的是我们测试的单条sql比较短 max_allowed_packet指代mysql服务器端和客户端在一次传送数据 ...
- 批量插入数据库语句java_java相关:MyBatis批量插入数据到Oracle数据库中的两种方式(实例代码)...
java相关:MyBatis批量插入数据到Oracle数据库中的两种方式(实例代码) 发布于 2020-7-22| 复制链接 本文通过实例代码给大家分享了MyBatis批量插入数据到Oracle数据库 ...
- Mybatis批量插入数据的两种方式
总体描述 软件开发过程中需要批量插入数据的场景有几种: 从离线文件(excel, csv等)导入大批量数据到系统. 从其它系统定时或者人工同步大批量数据到系统. 程序自身的某些算法执行时会生成大批量数 ...
- oracle批量插入报错,[数据库]Mybatis 批量插入数据 关于Oracle 批量插入报错:ORA
[数据库]Mybatis 批量插入数据 关于Oracle 批量插入报错:ORA 0 2020-08-19 08:00:06 Mybatis 批量插入数据 关于Oracle 批量插入报错:ORA-009 ...
- 【SpringBoot项目中使用Mybatis批量插入百万条数据】
SpringBoot项目中使用Mybatis批量插入百万条数据 话不多说,直接上代码,测试原生批处理的效率 开始测试 背景:因为一些业务问题,需要做多数据源,多库批量查询.插入操作,所以就研究了一下. ...
- MyBatis批量插入(sqlserver BULK INSERT)
MyBatis批量插入: 1. foreach方式 2.sqlsession + sqlsession.flushStatements方式: // SqlSession sqlSessi ...
- MyBatis - 批量插入
由于MyBatis的本质是对JDBC的封装,所以从JDBC的原生来看此问题~ 一.原生JDBC插入两种方式 conn.setAutoCommit(false); //设置手动提交 //预编译sql对象 ...
- mybatis批量插入(insert)和批量更新(update)
文章目录 一.Mybatis批量插入 二.批量更新 前言:这两天在做mybatis批量插入和更新的时候,对这块不是很清楚,所以今天写篇文章,巩固加深印象. 一.Mybatis批量插入 批量插入的sql ...
- Mybatis 批量插入报ORA-00933: SQL 命令未正确结束
Mybatis 批量插入报ORA-00933: SQL 命令未正确结束 错误出现的场景是这样的,将多个月份的1000条数据分别插入到各月份表中. MySQL中,批量插入数据到表,会在一定程度提高效率. ...
最新文章
- pythonfor循环案例教程_python开发之for循环操作实例详解,pythonfor实例详解
- python文件操作二
- oracle 11g ORA-12541: TNS: 无监听程序 (DBD ERROR: OCIServerAttach)
- 简单暴力到dp的优化(萌新篇)
- 安卓模拟器不能上网时可尝试更改成谷歌DNS
- c语言银行系统个人心得,c,,银行管理实验报告心得体会.docx
- 牛客练习赛30: D. 消消乐(二分匹配+输出最小点覆盖)
- 如何减小Exe, DLL 的大小
- python接口在哪里_在Python中实现接口?
- 阿里云技术专家入选Apache Member;百度Q1财报:营收241亿元;华为面向全球发布AI-Native数据库……...
- 51单片机-矩阵键盘
- 技术文化和惨淡命运 —— 怀念中国雅虎----转载
- 计算机打印机图标删除吗,故障之:打印图标消失及打印任务无法取消
- 1056. Confusing Number
- do_bootm 分析
- 数字练习_为什么要练习数字简约
- python如何限制字符串长度_python如何修改字符串长度
- Java面试题中高级,nasdocker有啥好玩的
- decimal与decimal?的区别
- 趣味算法图解,高清无码图免费下载