数据库批量插入数据的三种方法

这篇具有很好参考价值的文章主要介绍了数据库批量插入数据的三种方法。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、准备工作

测试环境:SpringBoot项目+MybatisPlus框架+MySQL数据库+Lombok

二、导入依赖

		<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
            <version>2.5.3</version>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.20</version>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.18.22</version>
        </dependency>
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
            <version>3.5.1</version>
        </dependency>

三、yml配置文件

server:
  port: 8081

spring:
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    type: com.alibaba.druid.pool.DruidDataSource
    username: root
    password: 123456
    url: jdbc:mysql://localhost:3306/mysql?useSSL=false&characterEncoding=utf-8&useUnicode=true&serverTimezone=GMT%2B8&rewriteBatchedStatements=true
	##rewriteBatchedStatements=true   开启批处理模式

四、实体类(数据库表要有对应字段)

package com.cy.model;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.io.Serializable;

@Data
@AllArgsConstructor
@NoArgsConstructor
public class User implements Serializable {

    private Integer id;

    private String username;

    private String password;

}

五、测试

  1. 方法一:for循环插入(单条)(总耗时:n分钟,每次都要获取连接Connection、释放连接和关闭资源等操作,比较耗时,这里就没测了)
	@RequestMapping("/test3")  //单个插入(慢)
    public String test3(){
        long startTime=System.currentTimeMillis();
        for(int i=0;i<100000;i++){
            userService.save(new User(i+1,"张三","123456"));
        }
        long endTime=System.currentTimeMillis();
        long result=endTime-startTime;
        return "总耗时:"+(result/1000);
    }
  1. 方法二:批量插入saveBatch(4~7秒,这里用到了MybatisPLus的saveBatch批量插入方法,实际也是for循环单条插入,只不过它是利用分片处理batchSize=1000和分批提交事务,从而提高了性能,不用在Connection上消费性能了)(推荐)
	@RequestMapping("/test2")  //批量插入saveBatch(分片处理batchSize=1000,分批提交事务) (次快)
    public String test2(){
        List<User> userList=new ArrayList<>();
        long startTime=System.currentTimeMillis();

        for(int i=0;i<100000;i++){
            userList.add(new User(i+1,"张三","123456"));
        }
        userService.saveBatch(userList);
        long endTime=System.currentTimeMillis();
        long result=endTime-startTime;
        return "总耗时:"+(result/1000);
    }
  1. 方法三:循环插入+开启批处理模式(4~7秒,开启批处理模式,关闭自动提交事务,共同用一个sqlsession,单个插入性能得到提升,由于用同一个sqlsession,极大的减少了对资源操作和对事务处理的时间,很好地提高了性能)(推荐)
	@Resource
    private SqlSessionFactory sqlSessionFactory;
	@RequestMapping("/test1")  //批量插入(最快)---循环插入+批处理模式 ( 开启批处理模式  rewriteBatchedStatements=true )
    public String test1(){
        //开启批处理模式,关闭自动提交事务
        SqlSession sqlSession= sqlSessionFactory.openSession(ExecutorType.BATCH,false);
        long startTime=System.currentTimeMillis();
        UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
        for(int i=0;i<100000;i++){
            userMapper.insert(new User(i+1,"张三","123456"));
        }
        sqlSession.commit();//一次性提交事务
        sqlSession.close();//关闭资源
        long endTime=System.currentTimeMillis();
        long result=endTime-startTime;
        return "总耗时:"+(result/1000);
    }

以上就是全部内容,希望对大家有帮助!文章来源地址https://www.toymoban.com/news/detail-627116.html

到了这里,关于数据库批量插入数据的三种方法的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【数据库】Python脚本实现数据库批量插入事务

    在工作中可能会遇到需要批量插入的场景, 而批量插入的过程具有 耗时长 的特点, 再此过程很容易出现程序崩溃的情况.为了解决插入大量数据插入后崩溃导致 已插入数据无法清理 及 未插入数据无法筛出 的问题, 需要编写一个脚本记录已插入和未插入的数据, 并可以根据记录

    2024年02月08日
    浏览(34)
  • sql文件导入数据库的三种方式

    方式一:在数据库的表中直接右键运行sql文件    方式二:终端窗口 cmd,管理员身份运行 C:WINDOWSsystem32mysql -uroot -p 输入密码 use 数据库名; mysql use reggie; source sql文件路径(不能含有中文) 方式三:在数据库或终端输入sql指令 新建查询--输入sql语句--运行

    2024年02月03日
    浏览(38)
  • PostgreSQL数据库命令行执行SQL脚本的三种方式

    生成环境中,出于安全性等原因,往往不提供数据库连接工具,所以对数据库的更新和升级就得通过命令行来实现。本文总结了三种命令行执行sql脚本的方式。 命令格式: psql [option…] [dbname] [username] 常用参数介绍: -h:指定IP地址或主机名。 -p:指定端口,默认为5432。 -U:

    2024年02月11日
    浏览(45)
  • 还原Sql Server数据库BAK备份文件的三种方式及常见错误

    这是演示的是Sql Server 2008R2版本,不同版本可能有细微差别 右键点击数据库→还原数据库    在还原的源中选择源设备→点击选择框  在指定备份中点击添加→选择具体文件→确定→确定  勾选用于还原的备份集→这时目标数据库中会自动生成目标数据库名,在此选择即可→

    2023年04月08日
    浏览(42)
  • 数据库中的字段名与实体类中的属性名不能一一对应时的三种处理方式

    当查询结果的列名和java对象的属性名对应不上时需要采用下列方式进行处理:         第一种方式:在查询语句中使用\\\"as\\\" 给列起别名         第二种方式:使用resultMap结果映射         第三种方式:开启驼峰命名自动映射(配置settings) 实体类Car: packa

    2024年02月09日
    浏览(29)
  • Linux批量快速修改文件名的三种方法

    在Linux中, 批量重命名文件 是一项常见且有用的操作。以下是三种常用的批量重命名文件的方法,每种方法都附有示例。这些方法既可以适用于新手,也适用于更有经验的用户。 话不多说,直接上干货! rename 命令 rename命令是一种强大的批量重命名工具,它支持使用正则表

    2024年04月11日
    浏览(40)
  • java批量修改数据库数据

    批量更新 mysql更新语句很简单,更新一条数据的某个字段,一般这样写: 代码如下: UPDATE mytable SET myfield = ‘value’ WHERE other_field = ‘other_value’; 如果更新同一字段为同一个值,mysql也很简单,修改下where即可: 代码如下: UPDATE mytable SET myfield = ‘value’ WHERE other_field in (‘oth

    2024年02月16日
    浏览(36)
  • Java怎么实现几十万条同时数据插入(三种基本方法测试)

    目录 1,使用批量插入  2,使用多线程 3,使用存储过程 在Java中实现插入几十万条数据,有多种方法可以使用。以下是其中的几种: 使用批量插入可以有效地提高插入速度。下面是一个示例代码: 使用多线程可以将数据分为多个部分并行插入,提高效率。以下是一个示例代

    2024年02月14日
    浏览(30)
  • mysql插入重复数据的三种处理方式(DUPLICATE、IGNORE、REPLACE )

    “ INSERT   ...  ON  DUPLICATE   KEY  UPDATE   ”, 它是在插入操作时, 如果数据出现重复,则更新重复数据的值 。   示例: INSERT INTO myf_deal_data ( `ID`, `PTNAME`, `PTDATA`, `OPERTIME`, `REPORTTIME` ) VALUES     ( 111, \\\'858_Ua\\\', \\\'219.1000\\\', \\\'2022-04-01 00:45:00\\\', \\\'2022-06-28 10:04:52\\\' )  ON DUPLICATE KEY UPDATE PT

    2024年02月10日
    浏览(35)
  • Mybatis-Plus批量添加或修改数据的三种方式

    提供的方法 是遍历每一个元素,判断主键是否存在,如果存在则做更新,不存在添加 先获取表中所有的主键 ,然后 判断是否已存在,存在更新,不存在添加 on duplicate key update 是Mysql特有的语法,如下图所示,表中id 为主键 再插入id为1的数据,则提示主键已存在 改成如下

    2024年02月06日
    浏览(32)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包