当前位置:   article > 正文

公司新来个同事,MyBatis批量插入10w条数据仅用2秒,拍案叫绝!_java中批量更新mysql10万条

java中批量更新mysql10万条

批量插入功能是我们日常工作中比较常见的业务功能之一,今天咱们来一个 MyBatis 批量插入的汇总篇,同时对 3 种实现方法做一个性能测试,以及相应的原理分析。

先来简单说一下 3 种批量插入功能分别是:

  1. 循环单次插入;

  2. MP 批量插入功能;

  3. 原生批量插入功能。

准备工作

开始之前我们先来创建数据库和测试数据,执行的 SQL 脚本如下:

  1. -- ----------------------------
  2. -- 创建数据库
  3. -- ----------------------------
  4. SET NAMES utf8mb4;
  5. SET FOREIGN_KEY_CHECKS = 0;
  6. DROP DATABASE IF EXISTS `testdb`;
  7. CREATE DATABASE `testdb`;
  8. USE `testdb`;
  9. -- ----------------------------
  10. -- 创建 user 表
  11. -- ----------------------------
  12. DROP TABLE IF EXISTS `user`;
  13. CREATE TABLE `user`  (
  14.   `id` int(11NOT NULL AUTO_INCREMENT,
  15.   `name` varchar(255CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL,
  16.   `password` varchar(255CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL,
  17.   `createtime` datetime NULL DEFAULT CURRENT_TIMESTAMP,
  18.   PRIMARY KEY (`id`) USING BTREE
  19. ) ENGINE = InnoDB AUTO_INCREMENT = 6 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_bin ROW_FORMAT = Dynamic;
  20. -- ----------------------------
  21. -- 添加测试数据
  22. -- ----------------------------
  23. INSERT INTO `user` VALUES (1'赵云''123456''2021-09-10 18:11:16');
  24. INSERT INTO `user` VALUES (2'张飞''123456''2021-09-10 18:11:28');
  25. INSERT INTO `user` VALUES (3'关羽''123456''2021-09-10 18:11:34');
  26. INSERT INTO `user` VALUES (4'刘备''123456''2021-09-10 18:11:41');
  27. INSERT INTO `user` VALUES (5'曹操''123456''2021-09-10 18:12:02');
  28. SET FOREIGN_KEY_CHECKS = 1;

数据库的最终效果如下:

1.循环单次插入

接下来我们将使用 Spring Boot 项目,批量插入 10W 条数据来分别测试各个方法的执行时间。

循环单次插入的(测试)核心代码如下:

  1. import com.example.demo.model.User;
  2. import com.example.demo.service.impl.UserServiceImpl;
  3. import org.junit.jupiter.api.Test;
  4. import org.springframework.beans.factory.annotation.Autowired;
  5. import org.springframework.boot.test.context.SpringBootTest;
  6. @SpringBootTest
  7. class UserControllerTest {
  8.     // 最大循环次数
  9.     private static final int MAXCOUNT = 100000;
  10.     @Autowired
  11.     private UserServiceImpl userService;
  12.     /**
  13.      * 循环单次插入
  14.      */
  15.     @Test
  16.     void save() {
  17.         long stime = System.currentTimeM
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/酷酷是懒虫/article/detail/795809
推荐阅读
相关标签
  

闽ICP备14008679号