文章目录

  • 前言
  • 一、MySQL批量插入的应用场景
  • 二、实现过程
    • 1、Controller层获得导入的Excel数据
    • 2、mapper.xml的SQL语句
    • 3、批量插入优点
  • 总结

前言

MySQL批量插入操作相较于单次循环插入有较大的优势,在特定场景下,有比较重要的应用价值。


一、MySQL批量插入的应用场景

我在做项目的时候遇到Excel导入基础数据的情况,在对Excel进行解析,并拿到Excel里面的数据之后,下一步是插入数据库。最简单的方式是使用单次循环插入,但是这种方法效率太慢,不具有事务特征,所以使用批量插入的方法。

二、实现过程

1、Controller层获得导入的Excel数据

代码如下(代码中的CourseInfoList就是一个List集合,存储着CourseInfo对象):

    @PostMapping("/importCourse")public AjaxResult importCourse(MultipartFile file) throws Exception{GeneralListener<CourseInfo> generalListener = new GeneralListener<>();EasyExcel.read(file.getInputStream(),CourseInfo.class,generalListener).sheet().doRead();List<CourseInfo> courseInfoList = generalListener.getList();courseService.insertCourseByBatch(courseInfoList);return AjaxResult.success();}

2、mapper.xml的SQL语句

service层和domain层就省略了。

  • mapper.java代码如下:
@Mapper
public interface CourseInfoMapper {void insertCourseByBatch(@Param("list") List<CourseInfo> list);
}
  • mapper.xml代码如下:
  <insert id="insertCourseByBatch" parameterType="java.util.List">insert into course_info (id,courseNo,courseName, courseAttr, credit, totalHour, status, description)values<foreach collection="list" item="item" index="index" separator=",">(#{item.id,jdbcType=BIGINT},#{item.courseno,jdbcType=VARCHAR},#{item.coursename,jdbcType=VARCHAR},#{item.courseattr,jdbcType=VARCHAR},#{item.credit,jdbcType=INTEGER},#{item.totalhour,jdbcType=INTEGER},#{item.status,jdbcType=INTEGER},#{item.description,jdbcType=VARCHAR})</foreach></insert>

这里遇到一个坑,网上很多博客在写这块的时候,都没有加上jdbcType,我一开始也没加,但是一直报错,后来加上jdbcType之后,才解决问题。

3、批量插入优点

  • 批量插入效率比单次插入要高很多,能节省大约2/3的时间,原因在于:(1)降低了日志(MySQL的binlog和innodb的事务日志)刷盘的数据量和频率。(2)减少了SQL语句的解析次数。(3)、减少了网络传输的IO等。
  • 操作的事务性。单次插入时,每个insert会开启一个事务,当执行很多insert的时候,会影响插入的性能。使用批量插入,可以在执行完成之后commit,保证了整批数据要么同时插入,要么都不插入。
  • 批量插入有数据量的限制,即max_allowed_packet值,超过最大值会报错,但是一般情况下不会超过最大值,如果需要插入几十万条甚至上百万条数据,就需要对这种情况进行处理。

总结

这里对mybatis批量插入进行一个小的总结,本质上是将很多条待插入的数据拼接为一条SQL语句,再执行插入操作,在Excel导入等场景下是很有用的。

MySQL批量插入(使用mybatis实现mysql数据库的批量插入操作)相关推荐

  1. Mysql分页加pagebean_Spring+MyBatis+SpringMvc+Mysql+Druid+PageHelper分页实现

    我是阿福,公众号「阿福聊编程」作者,一个在后端技术路上摸盘滚打的程序员,在进阶的路上,共勉!文章已收录在 JavaSharing 中,包含Java技术文章,面试指南,资源分享. 思路分析 MyBati ...

  2. mybatis mysql uuid_spring boot整合mybatis利用Mysql实现主键UUID的方法

    {"moduleinfo":{"card_count":[{"count_phone":1,"count":1}],&q ...

  3. java插入数据库字符串拼接_java连接mysql数据库实现单条插入和批量插入

    本文实例为大家分享了java连接mysql数据库实现单条和批量插入的具体代码,供大家参考,具体内容如下 本文插入数据库的数据来源:java + dom4j.jar提取xml文档内容 1.连接数据库 p ...

  4. mybatis向mysql数据库插入数据时,中文乱码显示为?解决方法

    mybatis向mysql数据库插入数据时,中文乱码显示为?解决方法 1.先查看库.表.表字符字段的编码格式.MySQL默认的库和表的字符编码都是latin1,而我们一般需要使用 utf8 //先查看 ...

  5. jdbc连接Oracle/MySQL数据库进行批量导入操作,如何提高效率???

    使用JDBC连接Oracle数据库进行批量数据导入的时候,特别是大批量数据连续插入(百万级或以上),如何提高效率呢? 在JDBC编程接口中有两个方法特别值得注意: (1)void addBatch() ...

  6. java毕业设计汽车租赁系统演示录像源码+lw文档+mybatis+系统+mysql数据库+调试

    java毕业设计汽车租赁系统演示录像源码+lw文档+mybatis+系统+mysql数据库+调试 java毕业设计汽车租赁系统演示录像源码+lw文档+mybatis+系统+mysql数据库+调试 本源 ...

  7. java毕业设计项目材料管理系统源码+lw文档+mybatis+系统+mysql数据库+调试

    java毕业设计项目材料管理系统源码+lw文档+mybatis+系统+mysql数据库+调试 java毕业设计项目材料管理系统源码+lw文档+mybatis+系统+mysql数据库+调试 本源码技术栈 ...

  8. java毕业设计旅游景点推荐系统源码+lw文档+mybatis+系统+mysql数据库+调试

    java毕业设计旅游景点推荐系统源码+lw文档+mybatis+系统+mysql数据库+调试 java毕业设计旅游景点推荐系统源码+lw文档+mybatis+系统+mysql数据库+调试 本源码技术栈 ...

  9. java毕业设计视频点播系统演示录像源码+lw文档+mybatis+系统+mysql数据库+调试

    java毕业设计视频点播系统演示录像源码+lw文档+mybatis+系统+mysql数据库+调试 java毕业设计视频点播系统演示录像源码+lw文档+mybatis+系统+mysql数据库+调试 本源 ...

  10. bd2和mysql语法区别,经验:在MySQL数据库中,这4种方式可以避免重复的插入数据!...

    最常见的方式就是为字段设置主键或唯一索引,当插入重复数据时,抛出错误,程序终止,但这会给后续处理带来麻烦,因此需要对插入语句做特殊处理,尽量避开或忽略异常,下面我简单介绍一下,感兴趣的朋友可以尝试一下 ...

最新文章

  1. jquery .parents(), .parent() 和 closest()方法
  2. android工程建立到最后一步提示unsupported template dependency的解决方法
  3. 公务员注册账号,密码
  4. Neo4j:在Neo4j浏览器的帮助下探索新数据集
  5. @loj - 2483@「CEOI2017」Building Bridges
  6. I.MX6 android 获取framebuffer信息
  7. 计算机课有什么作业,计算机组成原理课堂作业
  8. 英伟达最大gpu_摩尔定律未死,黄律定律已出!英伟达要用GPU推动AI性能逐年翻倍...
  9. VisualRoute for Mac OS 体验
  10. 怎样在计算机上注册dll文件,注册dll文件【搞定步骤】
  11. 9106w android7,三星note4 SM-N9106W原厂刷机包4.4.4/5.0.1rom线刷包Root驱动
  12. java实现马尔科夫链_马尔科夫链 Markov Chains(示例代码)
  13. Word中部分内容出现乱码、不显示页码和目录
  14. Echarts源码修改
  15. c语言程序设计基本模板,《C语言程序设计基础教程》试讲教案模板
  16. iphone计算机打电话,教你在Win10上使用iPhone的电话、短信功能
  17. 移除元素---2022/03/16
  18. 抖音小店无货源去哪找货源?抖店最新整改代拍公告,新规速递
  19. opencv历史BUG
  20. C++ open函数

热门文章

  1. Python实战:个人贷款计算器
  2. 如何区分网线是几类的_几类网线怎么区分
  3. 推荐一款调试工具:深蓝串口调试工具 2021秋季版(2.16.1.),一直使用这个,最近更新好快。
  4. windows计划任务下 任务启动失败 错误码 2147942402
  5. 缺少vclie60.bpl的解决方法
  6. 仿真工具NS3的基本知识
  7. 我对SegNet的理解
  8. GB与CE标准对照表-转载
  9. 基于模块化多电平换流器(MMC)的柔性直流输电系统simulink仿真模型开发
  10. CDA LEVEL I 数据分析认证考试模拟题库(一)