赞
踩
批量插入功能是我们日常工作中比较常见的业务功能之一,今天咱们来一个 MyBatis 批量插入的汇总篇,同时对 3 种实现方法做一个性能测试,以及相应的原理分析。
先来简单说一下 3 种批量插入功能分别是:
循环单次插入;
MP 批量插入功能;
原生批量插入功能。
开始之前我们先来创建数据库和测试数据,执行的 SQL 脚本如下:
- -- ----------------------------
- -- 创建数据库
- -- ----------------------------
- SET NAMES utf8mb4;
- SET FOREIGN_KEY_CHECKS = 0;
- DROP DATABASE IF EXISTS `testdb`;
- CREATE DATABASE `testdb`;
- USE `testdb`;
-
- -- ----------------------------
- -- 创建 user 表
- -- ----------------------------
- DROP TABLE IF EXISTS `user`;
- CREATE TABLE `user` (
- `id` int(11) NOT NULL AUTO_INCREMENT,
- `name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL,
- `password` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL,
- `createtime` datetime NULL DEFAULT CURRENT_TIMESTAMP,
- PRIMARY KEY (`id`) USING BTREE
- ) ENGINE = InnoDB AUTO_INCREMENT = 6 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_bin ROW_FORMAT = Dynamic;
-
- -- ----------------------------
- -- 添加测试数据
- -- ----------------------------
- INSERT INTO `user` VALUES (1, '赵云', '123456', '2021-09-10 18:11:16');
- INSERT INTO `user` VALUES (2, '张飞', '123456', '2021-09-10 18:11:28');
- INSERT INTO `user` VALUES (3, '关羽', '123456', '2021-09-10 18:11:34');
- INSERT INTO `user` VALUES (4, '刘备', '123456', '2021-09-10 18:11:41');
- INSERT INTO `user` VALUES (5, '曹操', '123456', '2021-09-10 18:12:02');
-
- SET FOREIGN_KEY_CHECKS = 1;
数据库的最终效果如下:
接下来我们将使用 Spring Boot 项目,批量插入 10W 条数据来分别测试各个方法的执行时间。
循环单次插入的(测试)核心代码如下:
- import com.example.demo.model.User;
- import com.example.demo.service.impl.UserServiceImpl;
- import org.junit.jupiter.api.Test;
- import org.springframework.beans.factory.annotation.Autowired;
- import org.springframework.boot.test.context.SpringBootTest;
-
- @SpringBootTest
- class UserControllerTest {
-
- // 最大循环次数
- private static final int MAXCOUNT = 100000;
-
- @Autowired
- private UserServiceImpl userService;
-
- /**
- * 循环单次插入
- */
- @Test
- void save() {
- long stime = System.currentTimeM
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。