Mybatis批量插入哪家强?

前言

本文使用 Mybatis 进行批量插入,比较两种不同的插入方式的区别。

测试

批量插入注意事项:

1、连接数据库时添加参数 allowMultiQueries=true,支持多语句执行,批处理

2、数据库是否支持大量数据写入,设置 max_allowed_packet参数保证批次提交的数据量

拼接 sql

1
2
3
4
5
6
7
8
9
10
11
12
13
14
java复制代码public void batchDemo() {
long start = System.currentTimeMillis();
List<User> list = new ArrayList<>();
for (int i = 0; i < 5000; i++) {
User user = new User();
user.setId(UUID.randomUUID().toString());
user.setName("feiyangyang");
user.setPwd("feiyangyang");
list.add(user);
}
userService.batchForeach(list);
long end = System.currentTimeMillis();
System.out.println("---------------" + (start - end) + "---------------");
}
1
2
3
4
5
6
7
8
xml复制代码<insert id="batchForeach" parameterType="com.fyy.druid.entity.User">
insert into
user(id,`name`,pwd)
values
<foreach collection ="userList" item="user" separator =",">
(#{user.id}, #{user.name}, #{user.pwd})
</foreach>
</insert>

batch插入

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
java复制代码public void batchInsert() {
long start = System.currentTimeMillis();
SqlSession sqlSession = sqlSessionTemplate.getSqlSessionFactory().openSession(ExecutorType.BATCH);
UserService mapper = sqlSession.getMapper(UserService.class);

for (int i = 0; i < 5000; i++) {
User user = new User();
user.setId(UUID.randomUUID().toString());
user.setName("feiyangyang");
user.setPwd("feiyangyang");
mapper.batchInsert(user);
}
sqlSession.commit();
long end = System.currentTimeMillis();
System.out.println("---------------" + (start - end) + " ---------------");
}

数据对比

拼接sql (ms) batch插入 (ms)
500条 1744 639
2000条 26966 2473
5000条 173668 7382

本文转载自: 掘金

开发者博客 – 和开发相关的 这里全都有

0%