用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图:

点击下方卡片/微信搜索,关注公众号“天宇文创意乐派”(ID:gh_cc865e4c536b)

听说点赞和关注本号的都找到漂亮的小姐姐了哟且年后必入百万呀!!

MyBatis插入大量数据效率对比:foreach、SqlSession、sql三种方式批量插入相关推荐

  1. Excel中数据透视表数据源更新的三种方式

    Excel中数据透视表数据源更新的三种方式 1.在原有的基础上重新选择数据源 2.变数据源为表格形式,在创建一个透视表,之后如果添加的数据,选中透视表右键刷新即可 3.利用更新过的数据源再重新创建一个 ...

  2. 数据导入HBase最常用的三种方式及实践分析

    要使用Hadoop,数据合并至关重要,HBase应用甚广.一般而言,需要针对不同情景模式将现有的各种类型的数据库或数据文件中的数据转入至HBase中. 常见方式为:1.使用HBase的API中的Put ...

  3. win下配置的ES中的数据在哪里可以看到?三种方式你看那种更加高大上!!!(win_Elasticsearch)

    在上一篇博客<使用logstash将Mysql中的数据导入到ElasticSearch中(详细步骤,win_Elasticsearch)>中我们提到将数据插入到es中,那我怎么知道数据是否 ...

  4. js学习-DOM之动态创建元素的三种方式、插入元素、onkeydown与onkeyup两个事件整理...

    动态创建元素的三种方式: 第一种: Document.write(); <body> <input type="button" id="btn" ...

  5. mybatis批量插入oracle报表达式,mybatis oracle两种方式批量插入数据

    mybatis在oracle中批量插入数据时,单次批量大小有限制,批量插入时,单次批量过大,也会影响插入性能.故程序端也需要对应的限制. BEGIN insert into blacklist (id ...

  6. mybatis oracle两种方式批量插入数据(带序号)

    需求 批量从excle导入数据 jsp <input id="file" name="file" type="file"/> & ...

  7. 批量插入数据库语句java_java相关:MyBatis批量插入数据到Oracle数据库中的两种方式(实例代码)...

    java相关:MyBatis批量插入数据到Oracle数据库中的两种方式(实例代码) 发布于 2020-7-22| 复制链接 本文通过实例代码给大家分享了MyBatis批量插入数据到Oracle数据库 ...

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

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

  9. mysql重复上一行的快捷_MySql三种避免重复插入数据的方法

    前言 MySql 在存在主键冲突或唯一键冲突的情况下,根据插入方式,一般有以下三种插入方式避免错误. insert ignore. replace into insert on duplicate k ...

最新文章

  1. 理解javascript 回调函数
  2. iOS开发系列-线程同步dispatch_barrier_async
  3. java 生成objectid_【Java】唯一ID的几种生成方案
  4. java多线程之Concurrent包
  5. .编写一个注解。并添加元注解,让该注解可以用在方法上,类上,和属性上
  6. cocoscreator editbox 只允许数字_用Cocos做一个数字调节框
  7. Shell编程—企业生产案例
  8. carbon安装win7 thinkpad x1_联想ThinkPad X1 Carbon 2018笔记本win10怎么改win7
  9. VMProtect修复导入表的插件
  10. 一个基于对话框的简单MFC程序分析
  11. 【论文笔记】 ICRA 2021 通用无监督激光里程计 Self-supervised Learning of LiDAR Odometry for Robotic Applications
  12. 使用js正则匹配和替换淘口令边界
  13. 最贵新股没破发,此前弃购7.8个亿,背靠华为的这家半导体公司这么香?
  14. C语言(求最小公倍数的3种方法)
  15. 计算机毕业设计 在线免费小说微信小程序(源码+论文)
  16. 台式计算机中远程登录在哪里,电脑如何进行远程连接
  17. 勒索病毒威胁的解决方案
  18. parseInt转换
  19. 谷歌地图 替代_Google地图的替代品
  20. [人工智能-综述-5]:人工智能课程学习的10大基本问题与学习方法的建议

热门文章

  1. CI/CD如何支撑运维自动化
  2. 将PDF转Word工具看做武侠人物,最后一个被认为最强
  3. [精简]托福核心词汇55
  4. ECCV2022 | FPN错位对齐,实现高效半监督目标检测 (PseCo)
  5. vivo tws2耳机蓝牙同时连接笔记本电脑和手机
  6. 手把手教你如何在湾区买房子比别人低13万
  7. 产品设计体会(7020)不做没理想的咸鱼“人要是没有理想,和咸鱼有什么区
  8. 基于消息的异步松耦合系统
  9. java解压多个zip_使用Java解压缩多部分zip文件卷
  10. php waiting ttfb,浅谈我们个人博客网站加载过程中Waiting(TTFB)时间过长的解决办法...