Mybatis两种不同批量插入方式的区别

网友投稿 780 2022-12-08

Mybatis两种不同批量插入方式的区别

Mybatis两种不同批量插入方式的区别

目录前言测试拼接 sqlbatch插入数据对比总结

前言

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

测试

批量插入注意事项:

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

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

拼接 sql

public void batchDemo() {

long start = System.currentTimeMillis();

List list = new ArrayList<>();

for (int i = 0; i < 5000; i++) {

User user = new User();

user.setId(UUID.randomUUID().toString());

user.setNamehttp://("feiyangyang");

user.setPwd("feiyangyang");

list.add(user);

}

userService.batchForeach(list);

long end = System.currentTimeMillis();

System.out.println("---------------" + (start - end) + "---------------");

}

insert into

user(id,`name`,pwd)

values

(#{user.id}, #{user.name}, #{user.pwd})

batch插入

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) + " ---------------");

}

注意:batch模式也有自己的问题,比如在Insert操作时,在事务没有提交之前,是没有办法获取到自增的id,这在某型情形下是不符合业务要求的

数据对比

拼接sql (ms)

batch插入 (ms)

500条

1744

639

2000条

26966

2473

5000条

173668

7382

总结

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:源码解析带你了解LinkedHashMap
下一篇:Spring如何正确注入集合类型
相关文章

 发表评论

暂时没有评论,来抢沙发吧~