数据库批量插入数据的三种方法
生活随笔
收集整理的這篇文章主要介紹了
数据库批量插入数据的三种方法
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
一、準備工作
測試環境: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: 8081spring:datasource:driver-class-name: com.mysql.cj.jdbc.Drivertype: com.alibaba.druid.pool.DruidDataSourceusername: rootpassword: 123456url: 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;}
五、測試
- 方法一: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);}
- 方法二:批量插入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);}
- 方法三:循環插入+開啟批處理模式(4~7秒,開啟批處理模式,關閉自動提交事務,共同用一個sqlsession,單個插入性能得到提升,由于用同一個sqlsession,極大的減少了對資源操作和對事務處理的時間,很好地提高了性能)(推薦)
@Resourceprivate 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);}
以上就是全部內容,希望對大家有幫助!
總結
以上是生活随笔為你收集整理的数据库批量插入数据的三种方法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 苹果其他内存占用怎么解决
- 下一篇: 京东上市了,员工有多少股票? .