MySQL批量插入(使用mybatis实现mysql数据库的批量插入操作)
文章目录
- 前言
- 一、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数据库的批量插入操作)相关推荐
- Mysql分页加pagebean_Spring+MyBatis+SpringMvc+Mysql+Druid+PageHelper分页实现
我是阿福,公众号「阿福聊编程」作者,一个在后端技术路上摸盘滚打的程序员,在进阶的路上,共勉!文章已收录在 JavaSharing 中,包含Java技术文章,面试指南,资源分享. 思路分析 MyBati ...
- mybatis mysql uuid_spring boot整合mybatis利用Mysql实现主键UUID的方法
{"moduleinfo":{"card_count":[{"count_phone":1,"count":1}],&q ...
- java插入数据库字符串拼接_java连接mysql数据库实现单条插入和批量插入
本文实例为大家分享了java连接mysql数据库实现单条和批量插入的具体代码,供大家参考,具体内容如下 本文插入数据库的数据来源:java + dom4j.jar提取xml文档内容 1.连接数据库 p ...
- mybatis向mysql数据库插入数据时,中文乱码显示为?解决方法
mybatis向mysql数据库插入数据时,中文乱码显示为?解决方法 1.先查看库.表.表字符字段的编码格式.MySQL默认的库和表的字符编码都是latin1,而我们一般需要使用 utf8 //先查看 ...
- jdbc连接Oracle/MySQL数据库进行批量导入操作,如何提高效率???
使用JDBC连接Oracle数据库进行批量数据导入的时候,特别是大批量数据连续插入(百万级或以上),如何提高效率呢? 在JDBC编程接口中有两个方法特别值得注意: (1)void addBatch() ...
- java毕业设计汽车租赁系统演示录像源码+lw文档+mybatis+系统+mysql数据库+调试
java毕业设计汽车租赁系统演示录像源码+lw文档+mybatis+系统+mysql数据库+调试 java毕业设计汽车租赁系统演示录像源码+lw文档+mybatis+系统+mysql数据库+调试 本源 ...
- java毕业设计项目材料管理系统源码+lw文档+mybatis+系统+mysql数据库+调试
java毕业设计项目材料管理系统源码+lw文档+mybatis+系统+mysql数据库+调试 java毕业设计项目材料管理系统源码+lw文档+mybatis+系统+mysql数据库+调试 本源码技术栈 ...
- java毕业设计旅游景点推荐系统源码+lw文档+mybatis+系统+mysql数据库+调试
java毕业设计旅游景点推荐系统源码+lw文档+mybatis+系统+mysql数据库+调试 java毕业设计旅游景点推荐系统源码+lw文档+mybatis+系统+mysql数据库+调试 本源码技术栈 ...
- java毕业设计视频点播系统演示录像源码+lw文档+mybatis+系统+mysql数据库+调试
java毕业设计视频点播系统演示录像源码+lw文档+mybatis+系统+mysql数据库+调试 java毕业设计视频点播系统演示录像源码+lw文档+mybatis+系统+mysql数据库+调试 本源 ...
- bd2和mysql语法区别,经验:在MySQL数据库中,这4种方式可以避免重复的插入数据!...
最常见的方式就是为字段设置主键或唯一索引,当插入重复数据时,抛出错误,程序终止,但这会给后续处理带来麻烦,因此需要对插入语句做特殊处理,尽量避开或忽略异常,下面我简单介绍一下,感兴趣的朋友可以尝试一下 ...
最新文章
- jquery .parents(), .parent() 和 closest()方法
- android工程建立到最后一步提示unsupported template dependency的解决方法
- 公务员注册账号,密码
- Neo4j:在Neo4j浏览器的帮助下探索新数据集
- @loj - 2483@「CEOI2017」Building Bridges
- I.MX6 android 获取framebuffer信息
- 计算机课有什么作业,计算机组成原理课堂作业
- 英伟达最大gpu_摩尔定律未死,黄律定律已出!英伟达要用GPU推动AI性能逐年翻倍...
- VisualRoute for Mac OS 体验
- 怎样在计算机上注册dll文件,注册dll文件【搞定步骤】
- 9106w android7,三星note4 SM-N9106W原厂刷机包4.4.4/5.0.1rom线刷包Root驱动
- java实现马尔科夫链_马尔科夫链 Markov Chains(示例代码)
- Word中部分内容出现乱码、不显示页码和目录
- Echarts源码修改
- c语言程序设计基本模板,《C语言程序设计基础教程》试讲教案模板
- iphone计算机打电话,教你在Win10上使用iPhone的电话、短信功能
- 移除元素---2022/03/16
- 抖音小店无货源去哪找货源?抖店最新整改代拍公告,新规速递
- opencv历史BUG
- C++ open函数