千家信息网

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

发表于:2025-01-25 作者:千家信息网编辑
千家信息网最后更新 2025年01月25日,小编给大家分享一下Mybatis两种不同批量插入方式的区别有哪些,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!前言本文使用 Mybatis 进行批量插入,比较两种不同的插入方式的区别
千家信息网最后更新 2025年01月25日Mybatis两种不同批量插入方式的区别有哪些

小编给大家分享一下Mybatis两种不同批量插入方式的区别有哪些,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!

前言

本文使用 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.setName("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条1744639
2000条269662473
5000条1736687382

看完了这篇文章,相信你对"Mybatis两种不同批量插入方式的区别有哪些"有了一定的了解,如果想了解更多相关知识,欢迎关注行业资讯频道,感谢各位的阅读!

0