栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

mysql jdbc批处理,mybatis批处理,mybatis sql拼接批量传插入速度比较

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

mysql jdbc批处理,mybatis批处理,mybatis sql拼接批量传插入速度比较

环境:JDK8,Mysql5.7,Mybatis3.5.3

注意Mysql批处理时连接配置需开启批处理,否则批处理无效,速度比单条循环还要慢

数据库连接

数据库表

create table user
(
    id   varchar(32)  not null
        primary key,
    name varchar(100) null,
    sex  varchar(5)   null,
    age  int          null,
    corp varchar(100) null,
    job  varchar(100) null
);

实体类

```java
public class User {
    @ExcelIgnore
    private String id;

    @ExcelProperty("姓名")
    private String name;

    @ExcelProperty("性别")
    private String sex;

    @ExcelProperty("年龄")
    private Integer age;

    @ExcelProperty("部门")
    private String corp;

    @ExcelProperty("工作")
    private String job;
}

插入数量50万

jdbc批处理
		DataSource datasource = applicationContext.getBean(DataSource.class);

        Connection connection = datasource.getConnection();
        connection.setAutoCommit(false);

        PreparedStatement statement = connection.prepareStatement("insert into user(id,name,sex,age,corp,job) values (?,?,?,?,?,?)");

        User user;
        int batchCount = 0;
        Instant start = Instant.now();

        for (int i = 0; i < 500000; i++) {
            user = initUser();

            statement.setString(1,user.getId());
            statement.setString(2,user.getName());
            statement.setString(3,user.getSex());
            statement.setInt(4,user.getAge());
            statement.setString(5,user.getCorp());
            statement.setString(6,user.getJob());
            statement.addBatch();

            batchCount++;

            if(batchCount >= 2000){
                statement.executeBatch();
                connection.commit();
                statement.clearBatch();
                System.out.println("提交数量:"+batchCount);
                batchCount = 0;
            }

        }
        
        if(batchCount > 0 ){
            statement.executeBatch();
            connection.commit();
        }
        
        connection.close();
        Instant end = Instant.now();
        System.out.println(Duration.between(start,end).getSeconds());
Mybatis批处理
		SqlSession sqlSession = sqlSessionFactory.openSession(ExecutorType.BATCH, false);
        UserMapper mapper = sqlSession.getMapper(UserMapper.class);

        Instant start = Instant.now();
        int batchCount = 0;

        for (int i = 0; i < 500000; i++) {
            User user = initUser();
            mapper.insertUser(user);
            batchCount++;

            if(batchCount >= 2000){
                sqlSession.commit();
                sqlSession.clearCache();
                System.out.println("提交数量:"+batchCount);
                batchCount = 0;
            }
        }

        if(batchCount > 0 ){
            sqlSession.commit();
        }
        sqlSession.close();
        Instant end = Instant.now();
        System.out.println(Duration.between(start,end).getSeconds());  
Mybatis sql拼接
        Instant start = Instant.now();
        int batchCount = 0;
        List userList = new ArrayList<>();

        for (int i = 0; i < 500000; i++) {
            User user = initUser();
            userList.add(user);
            batchCount++;

            if(batchCount >= 500){
                userMapper.insertUserList(userList);
                System.out.println("提交数量:"+batchCount);
                userList.clear();
                batchCount = 0;
            }
        }

        if(batchCount > 0 ){
            userMapper.insertUserList(userList);
        }
        Instant end = Instant.now();
        System.out.println(Duration.between(start,end).getSeconds());

        insert into user(id,name,sex,age,corp,job)
            values
            
                (#{item.id,jdbcType=VARCHAR},
                #{item.name,jdbcType=VARCHAR},
                #{item.sex,jdbcType=VARCHAR},
                #{item.age,jdbcType=INTEGER},
                #{item.corp,jdbcType=VARCHAR},
                #{item.job,jdbcType=VARCHAR})
            
    
对比结果
执行方式时间/秒
JDBC批处理35
Mybatis批处理44
Mybatis sql拼接102
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/490704.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号