mybatis 批量_java统计接口被调用的次数

mybatis 批量_java统计接口被调用的次数Mybatis几种批量插入方式及效率测试_mybatisinsert测试断言

网上有很多关于批量插入的信息,但有些不全,没有代码,一些人无从下手。自己整理了一下,做一个测试,和简单的代码!

mybatis常见的批量插入有4种:代码for插入、sqlSession插入、拼接sql语句插入、xml文件中foreach插入。

本次测试的数据量为分别为200条、1000条、10000条。每种数据量进行了5次测试,取其中某一次进行记录,并没有取最低时间或最高时间。

1、java中的for循环

for(int i = 0; i < 10000; i++){
    mapper.insert(entity)
}

下面图片中左上角350为执行时间,单位毫秒

mybatis 批量_java统计接口被调用的次数

mybatis 批量_java统计接口被调用的次数 mybatis 批量_java统计接口被调用的次数

2、 sqlSession

@Autowired
SqlSessionFactory sqlSessionFactory;

private void insertBatch(List<Entity> list){
    SqlSession sqlSession = sqlSessionFactory.openSession(ExecutorType.BATCH);
    try{
        EntityMapper entityMapper = sqlSession.getMapper(EntityMapper.class);
        list.forEach(entity -> {
            entityMapper.insert(entity);
        });
        sqlSession.commit();
        sqlSession.clearCache();
        sqlSession.close();
    }catch (Exception e){
        sqlSession.rollback();
        System.out.println(e.getMessage());
    }finally {
        if(sqlSession != null) sqlSession.close();
    }
    
}

 mybatis 批量_java统计接口被调用的次数

mybatis 批量_java统计接口被调用的次数

mybatis 批量_java统计接口被调用的次数

3、xml文件中foreach插入

	<insert id="insert">
		INSERT INTO entity( name, age) 
        VALUES
        <foreach collection="list" item="item" index="index" separator=",">
            #{item.name},
            #{item.age})
        </foreach>
    </insert>

mybatis 批量_java统计接口被调用的次数

mybatis 批量_java统计接口被调用的次数

mybatis 批量_java统计接口被调用的次数

4、StringBuffer拼接sql

service文件中代码

List<Entity> list = new ArrayList<>();
entityMapper.insertBatchSql(list);

mapper.java文件中代码 

    /**
     * 拼接批量插入sql
     * @param list
     */
    @InsertProvider(type = Task.class, method = "insertListSql")
    void insertBatch(List<Entity> list);

Task.java文件中代码

public String insertListSql(List<Entity> list){
    StringBuffer sqlList = new StringBuffer();
    sqlList.append(" INSERT INTO user( name, age )  VALUES ");
    for (int i = 0; i < list.size() ; i++) {
        Entity entity = list.get(i);
        sqlList.append(" (").append("'").append(user.getName()).append("',").append(user.getAge()).append(")");
        if (i < list.size()-1) {
            sqlList.append(",");
        }
    }
    return sqlList.toString();
}

mybatis 批量_java统计接口被调用的次数

mybatis 批量_java统计接口被调用的次数

mybatis 批量_java统计接口被调用的次数

通过测试结果可以很明显看出每种方法的效率。
从高到低
1、sql拼接

2、sqlSession

3、mybatis中的foreach

4、 java中for循环

10000条数据。sql拼接的方式仅需要1秒左右,java中for循环需要18秒,sqlSession需要4秒左右。
sql拼接的方式最快,但需要拼接sql。推荐大家用sql的方式进行批量操作,不要怕麻烦!

今天的文章mybatis 批量_java统计接口被调用的次数分享到此就结束了,感谢您的阅读。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/65301.html

(0)
编程小号编程小号

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注