点击关注公众号,利用碎片时间学习

使用mybatis插入数据执行效率对比,对比三种方式(测试数据库为MySQL),

  1. 使用 SqlSessionFactory,每一批数据执行一次提交

  2. 使用mybatis-plus框架的insert方法,for循环,每次执行一次插入

  3. 使用ibatis,纯sql插入

新增xml执行效率测试:xml执行时间比sql稍慢一些,50000条数据插入时间约为2000毫秒左右,平均时间是sql的2倍左右。

先贴出执行效果(数字代表执行的时间,单位毫秒):

测试代码:

//测试类
@RunWith(SpringRunner.class)
@SpringBootTest(classes = DemoApplication.class)
public class Test1 {@AutowiredUsersMapper usersMapper;@AutowiredSqlSessionFactory sqlSessionFactory;public List<Users> list = new ArrayList<>();@Beforepublic void  getList() {long start = System.currentTimeMillis();Users user;for (int i = 1; i <=50000 ; i++) {user = new Users();user.setId(i);user.setName("java");user.setAge(200);user.setManagerId(222);list.add(user);}System.out.println("拼装数据 耗时:"+(System.currentTimeMillis()-start));System.out.println(list.size());}@Testpublic void batchInsert() {SqlSession sqlSession = sqlSessionFactory.openSession(ExecutorType.BATCH,false);UsersMapper mapper = sqlSession.getMapper(UsersMapper.class);System.out.println("batchInsert 插入开始========");long start = System.currentTimeMillis();for (int i = 0; i < list.size(); i++) {mapper.insert(list.get(i));if (i%5000==4999) {sqlSession.flushStatements();
//                sqlSession.commit();
//                sqlSession.clearCache();}}
//        sqlSession.commit();
//        sqlSession.clearCache();sqlSession.flushStatements();System.out.println("SqlSession 批量插入耗时:"+(System.currentTimeMillis()-start));}@Testpublic void forEachInsert() {System.out.println("forEachInsert 插入开始========");long start = System.currentTimeMillis();for (int i = 0; i < list.size(); i++) {usersMapper.insert(list.get(i));}System.out.println("foreach 插入耗时:"+(System.currentTimeMillis()-start));}@Testpublic void sqlInsert() {System.out.println("sql 插入开始========");long start = System.currentTimeMillis();usersMapper.sqlInsert(list);System.out.println("sql 插入耗时:"+(System.currentTimeMillis()-start));}
//xml批量插入@Testpublic void xmlInsert() {System.out.println("xmlInsert 批量插入开始========");long start = System.currentTimeMillis();usersMapper.xmlBatchInsert(list);System.out.println("xmlInsert 批量插入耗时:"+(System.currentTimeMillis()-start));}}//sql插入相关类
@Repository
public interface UsersMapper extends BaseMapper<Users> {@InsertProvider(type = UsersProvider.class, method = "insertListSql")public void sqlInsert(List<Users> list);public void xmlBatchInsert(@Param("list") List<Users> list);
}public class UsersProvider {public String insertListSql(List<Users> list) {StringBuffer sqlList = new StringBuffer();sqlList.append(" INSERT INTO users(id,name,age,manager_id)  VALUES ");for (int i = 0; i < list.size() ; i++) {Users user = list.get(i);sqlList.append(" (").append(user.getId()).append(",").append("'").append(user.getName()).append("',").append(user.getAge()).append(",").append(user.getManagerId()).append(")");if (i < list.size()-1) {sqlList.append(",");}}return sqlList.toString();}
}

xml 插入mapper文件

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.example.demo.dao.UsersMapper"><insert id="xmlBatchInsert">INSERT INTO users(id,name,age,manager_id)  VALUES<foreach collection="list" item="item" index="index" separator=",">(#{item.id},#{item.name},#{item.age},#{item.managerId})</foreach></insert>
</mapper>

总结

sql插入的效率最高,sqlsession次之,mybatis框架foreach插入效率最低。

执行效率echarts图:

来源:blog.csdn.net/chenping1993/

article/details/106116000

推荐:

主流Java进阶技术(学习资料分享)

PS:因为公众号平台更改了推送规则,如果不想错过内容,记得读完点一下“在看”,加个“星标”,这样每次新文章推送才会第一时间出现在你的订阅列表里。点“在看”支持我们吧!

Mybatis插入大量数据效率对比:foreach插入、SqlSession批量插入、sql插入相关推荐

  1. MyBatis插入大量数据效率对比:foreach、SqlSession、sql三种方式批量插入

    用mybatis插入数据执行效率对比,对比三种方式(测试数据库为MySQL), 使用 SqlSessionFactory,每一批数据执行一次提交 使用mybatis-plus框架的insert方法,f ...

  2. LinkedList和ArrayList在尾部插入数据效率对比

    转载于:https://blog.csdn.net/qq_34144916/article/details/81154528 做这个实验之前,我的猜想的是:因为每次都是在尾部插入数据,而LinkedL ...

  3. CArray CList CMap 插入与遍历效率对比

    前言:程序中经常用到不定量数组,选择上可以使用CArray,CList,CMap,而这三者插入及遍历的效率,未测试过,随着数据量越来越大,需要做程序上的优化,于是比较下三种类型的插入盒遍历的效率. 一 ...

  4. MySQL 批量插入数据,单次插入多少条数据效率最高

    文章目录 一.前言 二.批量插入前准备 1.插入到数据表的字段 2.计算一行字段占用的空间 3.在数据里做插入操作的时候,整体时间的分配 三.批量插入数据测试 1.SQL语句的大小限制 2.查看服务器 ...

  5. MySQL 批量插入数据,一次插入多少行数据效率最高?

    一.前言 我们在操作大型数据表或者日志文件的时候经常会需要写入数据到数据库,那么最合适的方案就是数据库的批量插入.只是我们在执行批量操作的时候,一次插入多少数据才合适呢?假如需要插入的数据有百万条,那 ...

  6. MySQL 批量操作,一次插入多少行数据效率最高?

    一.前言 我们在操作大型数据表或者日志文件的时候经常会需要写入数据到数据库,那么最合适的方案就是数据库的批量插入.只是我们在执行批量操作的时候,一次插入多少数据才合适呢? 假如需要插入的数据有百万条, ...

  7. oracle+循环插入sql,SQL server,Oracle循环插入百万数据

    SQL server,Oracle循环插入百万数据 SQL server,Oracle循环插入百万数据 压测时常需要往数据库插入大量数据,下面是我往两个数据库插入数据时用的脚本 declare @ma ...

  8. php批量数据提交mysql_php在mysql里批量插入数据(代码实例)

    假如说我有这样一个表,我想往这个表里面插入大量数据CREATE TABLE IF NOT EXISTS `user_info` ( `id` int(11) NOT NULL AUTO_INCREME ...

  9. ADO.Net 缓冲 插入大型数据

    ADO.Net 缓冲 插入大型数据 Database, C#, ASP.NET 2004-8-9 | 16:58 通过插入或更新带有字符串值或字节数组(取决于数据库中的字段类型)的字段,可以将二进制大 ...

  10. mysql中插入中文数据

    今天遇到的问题使mysql中插入中文数据后显示乱码,我在mysql中插入中文的时候,可以插入可是select的时候却无法显示,为此我写下这篇博客用于解决mysql插入中文. 由于有些截图没有记录下来, ...

最新文章

  1. 近期知识图谱顶会论文推荐,你都读过哪几篇?
  2. os7.4 java环境安装_CentOS7.0安装Scala和sun jdk的方法
  3. .NET之生成数据库全流程
  4. Chrome 开发工具指南——通过工作空间保存更改
  5. 2009.12.9.工作日记
  6. 蓝桥杯 ADV-204 算法提高 快速幂
  7. MOE 分子动力学模拟操作
  8. Spring Cloud 基础教程 - 程序猿DD
  9. 英尺英寸和厘米的换算_英寸和厘米的换算
  10. 生物化学《第一章概述》
  11. 华为 OSPF特殊区域
  12. 使用Foxmail 登录qq邮箱使用第三发授权码登录失败
  13. JAVA个版本新特性
  14. 微信小程序时间显示几分钟前、几小时前、几天前....
  15. 你不知道的颠覆式创新者
  16. 华为鸿蒙新平板,华为鸿蒙Beta 3.0 版本推送更新 预装鸿蒙新平板获入网许可
  17. H-DenseUNet: Hybrid Densely Connected UNet for Liver and Tumor Segmentation From CT Volumes
  18. uni-app z-index无效的解决办法(遮罩层)
  19. 来广州找工作有一个多月了,今天终于有着落了,工资7000
  20. OSChina 周日乱弹 —— 种族不同,禁止交往

热门文章

  1. 支持预览html的解压软件,浏览器网页在线解压压缩文件工具
  2. WSAData结构体的作用
  3. CSS 固定定位:固定在版心右侧
  4. android系统应用更改内存,安卓root后必备神器:修改系统/清理内存神器
  5. android root写入文件,android中root用户无法往某些目录写入文件解决方法
  6. 2018年国考行测错题集(省级)
  7. 强网杯2021——wp
  8. buuctf--CrackRTF
  9. win7蓝屏报错:STOP:0x0000007E
  10. Android仿人人客户端(v5.7.1)——有关滑动式左侧菜单实现过程中网友的疑问解答