springboot 的 jdbcTemplate 是springboot对jdbc的简单封装。

本文主要内容是jdbcTemplate批量操作。

批量插入,批量更新等操作,调用的都是jdbcTemplate.batchUpdate()方法

打开idea,看batchUpdate()有以下几种重载方法:

本文主要说下第一种int[] batchUpdate(String... sql)和第五种 int[] batchUpdate(String sql, List batchArgs)的性能差异。

本文利用Spring boot的StopWatch来统计代码运行耗费的时间。

不了解的可以看看下面文章参考下:

StopWatch工具

建表sql

CREATE TABLE `test_jdbc` (`id` int(11) NOT NULL AUTO_INCREMENT,`name` varchar(255) DEFAULT NULL,`age` int(11) DEFAULT NULL,PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4;

测试代码

StopWatch stopWatch = new StopWatch();//多条sql执行 即 int[] batchUpdate(String... sql)String[] strings = new String[10000];for (int i = 0; i < 10000; i++) {strings[i] = "insert into test_jdbc (`name`) values ('"+i+"')";}stopWatch.start("多条sql");jdbcTemplate.batchUpdate(strings);stopWatch.stop();//一条sql,多组参数 即 int[] batchUpdate(String sql, List<Object[]> batchArgs)String sql = "insert into test_jdbc (`name`) values (?)";ArrayList<Object[]> objectList = new ArrayList<>();for (int i = 0; i < 10000; i++) {Object[] objects = new Object[]{String.valueOf(i)};objectList.add(objects);}stopWatch.start("一条sql,多组参数");jdbcTemplate.batchUpdate(sql, objectList);stopWatch.stop();//打印结果System.out.println(stopWatch.prettyPrint());

运行结果

StopWatch '': running time = 15360877100 ns
---------------------------------------------
ns         %     Task name
---------------------------------------------
15193000600 099% 多条sql
167876500 001% 一条sql,多组参数

单位是纳秒,换算到秒,一个是15.19s,一个是0.16s,相差还是非常巨大的。

还有一个要注意的地方是jdbc的配置

同样的代码,将rewriteBatchedStatements=true修改为rewriteBatchedStatements=false之后,结果如下

StopWatch '': running time = 35699665400 ns
---------------------------------------------
ns         %     Task name
---------------------------------------------
20115727800 056% 多条sql
15583937600 044% 一条sql,多组参数

一条sql,多组参数的时间变成15.58s,比之前开启了rewriteBatchedStatements的多条sql时间还要长。

JdbcTemplate批量插入相关推荐

  1. SpringBoot JPA 批量插入实现,使用原生sql解决SaveAll插入慢的问题

    1.项目中遇到了批量插入的操作,但是使用saveAll,数据量5000条而已,速度感人,用户体验贼差,哈哈,现在将解决方法记录一下. 2.创建springboot项目 3.引入pom依赖 <?x ...

  2. Spring利用JDBCTemplate实现批量插入和返回id

    1.先介绍一下java.sql.Connection接口提供的三个在执行插入语句后可取的自动生成的主键的方法: //第一个是 PreparedStatement prepareStatement(St ...

  3. spring JDBCTemplate实现批量插入及返回id

    1.插入一条记录返回刚插入记录的id public int addBean(final Bean b){ final String strSql = "insert into buy(id, ...

  4. mysql 主键 最佳实践_Spring Data Jpa + MySQL IDENTITY 主键下批量插入最佳实践

    Spring Data Jpa 虽然可以使用参数调整批量插入,但是仅限于主键策略不是 IDENTITY 的情况下,对于习惯了使用 IDENTITY 的 MySQL 选手来说,批量插入数据直接就悲剧了. ...

  5. 记录一次批量插入的优化历程

    一.前言 测试妹子反馈了一个bug,说后台报了个服务器异常--保存一个数量比较大的值时,比如 9999,一直在转圈圈,直到最后报了一个服务器异常.我接过了这个bug,经过仔细查看代码后发现,代码卡在了 ...

  6. 读取excel表格并且解析数据进行批量插入

    直接上代码 package ffcs.cn.peam.function.controller;import java.io.File; import java.io.IOException; impo ...

  7. node mysql 批量写入_请问如何使用node.js在MySQL中进行批量插入

    catspeake 我四处寻找关于批量插入对象的答案.Ragnar123的回答使我得出了这样的结论:function bulkInsert(connection, table, objectArray ...

  8. MySQL 批量插入:如何不插入重复数据?

    以下文章来源方志朋的博客,回复"666"获面试宝典 知识这个东西,看来真的要温故而知新,一直不用,都要忘记了???? 业务很简单:需要批量插入一些数据,数据来源可能是其他数据库的表 ...

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

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

最新文章

  1. boost::coroutine2模块实现解析器的测试程序
  2. python EasyGui
  3. vue 2个方法先后执行_浅析Vue的2个版本
  4. 外星人电脑为什么那么贵_为什么隐形矫正那么贵
  5. UI设计实用素材|iPhone样机模型(展示你的应用程序、网站或用户界面的完美方式。
  6. SAP License:ERP顾问们,为何你会面试失败?
  7. python完全支持面向对象编程_Python 面向对象编程概要
  8. 毕业答辩ppt怎么做?
  9. OpenCV.金字塔(Pyramid).向下金字塔
  10. round()函数的使用方法
  11. r语言html乱码,R语言:读入txt文件中文文本出现乱码解决方案
  12. 正则表达式必看书籍推荐
  13. android 面试题(三)
  14. 计算机网络之网络层7
  15. 淄博旅游景点与美食汇总
  16. 阿里云MaxCompute携手华大基因打造精准医疗应用云平台
  17. 年年立计划却年年倒?用对计划管理工具是关键
  18. 2022P02014139杨智关于香农编码、哈夫曼编码和费诺编码的比较
  19. 【Google I/O 2017回顾】Mobile First To AI First
  20. ChatGPT最快镜像,免费使用

热门文章

  1. 数据压缩第八周作业——MPEG编码器
  2. Centos7添加历史命令执行时间
  3. 【shadergraph入门】对材质进行UV操作自发光效果
  4. 【android】configuration
  5. 华为oj初级 求解立方根
  6. 数据结构之二叉树介绍
  7. python 递归实现树的三种遍历
  8. Shopee开店需要什么材料?Shopee新手开店入驻需满足的条件及入驻资料
  9. 2018’中国煤炭洗选加工论坛在西安举办
  10. python中codecs模块_python codecs模块解决UnicodeEncodeError