亲宝软件园·资讯

展开

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

_沸羊羊_ 人气:0
想了解Mybatis两种不同批量插入方式的区别的相关内容吗,_沸羊羊_在本文为您仔细讲解Mybatis批量插入方式的相关知识和一些Code实例,欢迎阅读和指正,我们先划重点:mybatis批量插入方式,mybatis批量操作,mybatis批量insert的几种方式,下面大家一起来学习吧。

前言

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

测试

批量插入注意事项:

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

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

拼接 sql

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

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

总结

加载全部内容

相关教程
猜你喜欢
用户评论