批量插入和批量更新的原理:把多条sql拼接为一条。
材料准备:测试表 test1
-- 测试表 test1
CREATE TABLE `test1` (
`id` int(14) NOT NULL,
`name` varchar(50) DEFAULT NULL,
`remark1` varchar(50) DEFAULT NULL,
`remark2` varchar(50) DEFAULT NULL,
`remark3` varchar(50) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci
一、批量插入
例如:要插入3条数据,那么非批量的插入数据,执行sql分别为:
insert into test1(id,name,remark1,remark2,remark3)
values(1,'sb','rmk11','rmk12','rmk13');
insert into test1(id,name,remark1,remark2,remark3)
values(2,'sb','rmk21','rmk22','rmk23');
insert into test1(id,name,remark1,remark2,remark3)
values(3,'sb','rmk33','rmk32','rmk33');
我们可以将以上的3条sql转变为1条sql:
insert into test1(id,name,remark1,remark2,remark3)
VALUES
(1,'sb','rmk11','rmk12','rmk13'),
(2,'sb','rmk21','rmk22','rmk23'),
(3,'sb','rmk33','rmk32','rmk33');
这样就只需要连接一次数据库,并且执行一条sql就可以插入多条数据了。
当然我们如果使用了mybatic,那么在插入多条数据的时候,不需要自己拼接sql,mybatis可以帮我们拼接。
TestBatchService 中的方法只需要把,需要插入的数据放入一个集合List中,然后直接调用mapper方法。
public void testInsertBatch() {
List<Test1> list = new ArrayList<>();
for (int i=0;i<10000;i++){
//拼装测试数据