MySQL批量插入(使用mybatis实现mysql数据库的批量插入操作)
MySQL批量插入操作相较于单次循环插入有较大的优势,在特定场景下,有比较重要的应用价值。这里对mybatis批量插入进行一个小的总结,本质上是将很多条待插入的数据拼接为一条SQL语句,再执行插入操作,在Excel导入等场景下是很有用的。先自我介绍一下,小编13年上师交大毕业,曾经在小公司待过,去过华为OPPO等大厂,18年进入阿里,直到现在。深知大多数初中级java工程师,想要升技能,往往是需要
文章目录
前言
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 list);
} -
mapper.xml代码如下:
insert into course_info (id,courseNo,courseName, courseAttr, credit, totalHour, status, description) values (#{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})
这里遇到一个坑,网上很多博客在写这块的时候,都没有加上jdbcType,我一开始也没加,但是一直报错,后来加上jdbcType之后,才解决问题。
3、批量插入优点
- 批量插入效率比单次插入要高很多,能节省大约2/3的时间,原因在于:(1)降低了日志(MySQL的binlog和innodb的事务日志)刷盘的数据量和频率。(2)减少了SQL语句的解析次数。(3)、减少了网络传输的IO等。
- 操作的事务性。单次插入时,每个insert会开启一个事务,当执行很多insert的时候,会影响插入的性能。使用批量插入,可以在执行完成之后commit,保证了整批数据要么同时插入,要么都不插入。
- 批量插入有数据量的限制,即max_allowed_packet值,超过最大值会报错,但是一般情况下不会超过最大值,如果需要插入几十万条甚至上百万条数据,就需要对这种情况进行处理。
总结
这里对mybatis批量插入进行一个小的总结,本质上是将很多条待插入的数据拼接为一条SQL语句,再执行插入操作,在Excel导入等场景下是很有用的。
先自我介绍一下,小编13年上师交大毕业,曾经在小公司待过,去过华为OPPO等大厂,18年进入阿里,直到现在。深知大多数初中级java工程师,想要升技能,往往是需要自己摸索成长或是报班学习,但对于培训机构动则近万元的学费,着实压力不小。自己不成体系的自学效率很低又漫长,而且容易碰到天花板技术停止不前。因此我收集了一份《java开发全套学习资料》送给大家,初衷也很简单,就是希望帮助到想自学又不知道该从何学起的朋友,同时减轻大家的负担。添加下方名片,即可获取全套学习资料哦

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐
所有评论(0)