JdbcTemplate批量插入

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

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

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

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

image

本文主要说下第一种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时间还要长。

  • 1
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值