批量插入功能是日常工作中比较常见的业务功能之一, MyBatis 批量插入的汇总,同时对 3 种实现方法做一个性能测试,以及相应的原理分析。
本文使用 Spring Boot 项目,批量插入 10W 条数据来分别测试各个方法的执行时间。
简单说一下 3 种批量插入功能分别是:
-
循环单次插入;
-
Mybatis-Plus 批量插入功能;
-
原生批量插入功能。
一、准备工作
开始之前先创建数据库和测试数据,执行的 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, '张三', 'qweqwe', '2021-09-10 18:11:16');
INSERT INTO `user` VALUES (2, '李四', 'asdasd', '2021-09-10 18:11:28');
INSERT INTO `user` VALUES (3, '王五', 'zxczxc', '2021-09-10 18:11:34');
INSERT INTO `user` VALUES (4, '赵六', 'asdasd', '2021-09-10 18:11:41');
INSERT INTO `user` VALUES (5, '孙Ⅶ', 'cvbcvb', '2021-09-10 18:12:02');
SET FOREIGN_KEY_CHECKS = 1;
二、循环单次插入
循环单次插入的(测试)核心代码如下:
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.b

本文通过Spring Boot项目测试了MyBatis的三种批量插入方式:循环单次插入、Mybatis-Plus批量插入和原生批量插入。在插入10万条数据时,Mybatis-Plus性能最佳,提升了15倍,原生批量插入可能因SQL过大导致错误,需调整MySQL配置。总结推荐使用Mybatis-Plus的批量插入功能。
1万+

被折叠的 条评论
为什么被折叠?



