mybatismysql批量insert数据_mysql数据库简介

mybatismysql批量insert数据_mysql数据库简介MySQL批量插入

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE稳定放心使用


前言

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导入等场景下是很有用的。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/185660.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • MySQL JDBC URL各参数详解

    MySQL JDBC URL各参数详解参数名称参数说明缺省值最低版本要求user数据库用户名(用于连接数据库)password用户密码(用于连接数据库)useUnicode是否使用Unicode字符集,如果参数characterEncoding设置为gb2312或gbk,本参数值必须设置为truefalse1.1guseSSLMySQL在高版本需要指明是否进行SSL连接在mysql连接字符串url中加入ssl=true或者false即可characterEncoding…

  • java中的四舍五入函数_java中进行四舍五入

    java中的四舍五入函数_java中进行四舍五入在oracle中有一个很好的函数进行四舍五入,round(),selectround(111112.23248987,6)fromdual;但是java的Number本身不提供四舍五入的方法,在oracle.jbo.domain.Number中提供了round()方法,也可以使用。在java中可以使用java.math.BigDecimal来进行四舍五入,或者直接使用DecimalForma…

  • phpMyAdmin安装配置教程

    phpMyAdmin安装配置教程phpMyAdmin就是一种MySQL的管理工具,安装该工具后,即可以通过Web形式直接管理MySQL数据库,不需要通过执行系统命令来管理,非常适合对数据库操作命令不熟悉的数据库管理者。一、我们从phpMyAdmin官网上下载该软件,然后将该软件压缩放置xampp目录下。​二、复制PHP文件config.sample.inc文件并改名为config.inc,并做如下修改:​注意:因为XAMPP包含了Apache、MySQL、PHP、PERL,它在安装时

  • Linux中chmod -R 递归修改文件权限的操作和 默认权限umask

    Linux中chmod -R 递归修改文件权限的操作和 默认权限umask修改文件权限命令作用chown修改拥有者chgrp修改组chmodx修改权限命令格式#修改文件|目录的拥有者chown用户名目录名|文件名#递归修改文件|目录的组chgrp-R组名文件名|目录名#递归修改文件权限chmod-R755文件名|目录名演示demo重点chmod在设置权限时,可以简单得使用三个数字对…

  • 基于Containerd部署Kubernetes

    基于Containerd部署Kubernetes

  • 企业竞争分析的几种方法:SWOT、波特五力、PEST「建议收藏」

    企业竞争分析的几种方法:SWOT、波特五力、PEST「建议收藏」最近实验室要申报一个互联网+的项目,项目中有关企业经营部分的内容着实令我们这些工科生无从下手,在咨询了某专业相关的学妹后稍微有了点头绪(此处手动感谢学妹的协助哈哈哈~),这里就把学到的有关竞争分析的方法总结一下~目录1、波特五力分析模型2、SWOT分析法3、PEST分析法1、波特五力分析模型波特五力分析模型是迈克尔·波特(MichaelPorter)与20世纪80年代提出的一种用于竞争战略的分析模型。顾名思义就是波特提出一个行业中的竞争,不只是在原有竞争对手中进行,而是存.

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号