欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 财经 > 创投人物 > SpringBoot开发——Spring Boot 3.3 高效批量插入万级数据的多种方案

SpringBoot开发——Spring Boot 3.3 高效批量插入万级数据的多种方案

2025/5/24 5:58:39 来源:https://blog.csdn.net/bjzhang75/article/details/144000212  浏览:    关键词:SpringBoot开发——Spring Boot 3.3 高效批量插入万级数据的多种方案

文章目录

  • 一、项目依赖配置(pom.xml)
  • 二、配置文件(application.yml)
  • 三、数据库表结构(user 表的DDL)
  • 四、后端实现
    • 1、使用JDBC批处理
    • 2、使用自定义SQL批处理
    • 3、单条插入(for循环)
    • 4、拼接SQL语句插入
    • 5、MyBatis-Plus的saveBatch方法
    • 6、循环插入 + 开启批处理模式
  • 五、完整项目实现:
    • MyBatis-Plus 实体类
    • MyBatis-Plus Mapper 接口
    • Service 接口
    • ServiceImpl 实现类
    • InsertController 类
  • 六、前端实现
  • 七、启动项目并测试
  • 总结

在大数据处理场景下,如何高效地将大量数据插入数据库是一个重要课题。本文基于 SpringBoot 3.3MyBatis-Plus,介绍几种高效的批量插入数据的方法,包括:

  • 使用JDBC批处理
  • 使用自定义SQL批处理
  • 单条插入(for循环
  • 拼接SQL语句插入
  • MyBatis-PlussaveBatch方法
  • 循环插入 + 开启批处理模式

每种方式都会结合代码示例进行深入讲解,前端将展示每种插入方式的执行时间,帮助你直观了解每种方法的性能表现。

运行效果:
在这里插入图片描述

一、项目依赖配置(pom.xml)

首先,在项目的pom.xml中添加必要的依赖:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>3.3.3</version><relativePath/> <!-- lookup parent from repository --></parent><groupId>com.icoderoad</groupId><artifactId>batch-insert</artifactId><version>0.0.1-SNAPSHOT</version><name>batch-insert</name><description>Demo project for Spring Boot</description><properties><java.version>17</java.version><mybatis-plus-boot-starter.version>3.5.7</mybatis-plus-boot-starter.version><mybatis-spring.version>3.0.3</mybatis-spring.version></properties><dependencies><!-- Spring Boot Starter Web --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>${mybatis-plus-boot-starter.version}</version></dependency><dependency><groupId>org.mybatis</groupId><artifactId>mybatis-spring</artifactId><version>${mybatis-spring.version}</version></dependency><!-- 数据库驱动依赖 --><dependency><groupId>com.mysql</groupId><artifactId>mysql-connector-j</artifactId><scope>runtime</scope></dependency><!-- Thymeleaf for template rendering --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-thymeleaf</artifactId></dependency><!-- Other dependencies --><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><optional>true</optional></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency></dependencies><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build></project>

二、配置文件(application.yml)

application.yml中,配置数据库连接信息:

spring:datasource:url: jdbc:mysql://localhost:3306/mydb?useSSL=false&serverTimezone=UTCusername: rootpassword: passworddriver-class-name: com.mysql.cj.jdbc.Driverthymeleaf:cache: false

三、数据库表结构(user 表的DDL)

在开始实现之前,我们需要创建一个用户表user。下面是其DDL语句

CREATE TABLE user (id BIGINT AUTO_INCREMENT PRIMARY KEY,name VARCHAR(50) NOT NULL,age INT NOT NULL
);

四、后端实现

1、使用JDBC批处理

原理
JDBC批处理通过PreparedStatementaddBatch和executeBatch方法一次性提交多条SQL插入操作。这种方法直接利用JDBC的批处理机制,可以显著提高插入效率。

优点

  • 高性能:JDBC的批处理机制可以提高性能,减少数据库交互的次数。
  • 标准化:使用标准的JDBC API,不依赖于特定的ORM框架

缺点

  • 需要手动管理:需要手动管理批处理的大小、事务等,代码复杂度较高。
  • 资源管理:需要确保JDBC连接PreparedStatement的正确关闭,避免资源泄漏。

适用场景
适用于需要高性能插入操作的场景,特别是当需要直接控制数据库交互的细节时。

@Service
public class UserService {@Autowiredprivate DataSource dataSource;public void insertUsersWithJdbcBatch(List<User> users) {String sql = "INSERT INTO user (name, age) VALUES (?, ?)";try (Connection conn = dataSource.getConnection();PreparedStatement ps = conn.prepareStatement(sql)

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词