自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

MyBatis Plus 批量數(shù)據(jù)插入功能,yyds!

數(shù)據(jù)庫 其他數(shù)據(jù)庫
本文我們使用 MyBatis-Plus(下文簡(jiǎn)稱 MP)自帶的 saveBatch 方法,來實(shí)現(xiàn)數(shù)據(jù)的批量插入功能,咱們本文重點(diǎn)介紹一下 MP 實(shí)現(xiàn)批量插入的具體步驟。

[[425955]]

作者 | 王磊

來源 | Java中文社群(ID:javacn666)

轉(zhuǎn)載請(qǐng)聯(lián)系授權(quán)(微信ID:GG_Stone

最近 Review 小伙伴代碼的時(shí)候,發(fā)現(xiàn)了一個(gè)小小的問題,小伙伴竟然在 for 循環(huán)中進(jìn)行了 insert (插入)數(shù)據(jù)庫的操作,這就會(huì)導(dǎo)致每次循環(huán)時(shí)都會(huì)進(jìn)行連接、插入、斷開連接的操作,從而導(dǎo)致一定的性能問題,簡(jiǎn)化后代碼如下:

  1. /** 
  2.  * 插入操作 
  3.  */ 
  4. @RequestMapping("/save"
  5. public Object save() { 
  6.     boolean flag = false; // 返回結(jié)果 
  7.     // 待添加(用戶)數(shù)據(jù) 
  8.     for (int i = 0; i < 1000; i++) { 
  9.         User user = new User(); 
  10.         user.setName("test:"+i); 
  11.         user.setPassword("123456"); 
  12.         // 插入數(shù)據(jù) 
  13.         flag = userService.save(user); 
  14.         if(!flag) break; 
  15.     } 
  16.     return flag; 

這樣做并不會(huì)改變程序最終的執(zhí)行結(jié)果,但會(huì)對(duì)程序的執(zhí)行效率帶來很大的影響,就好比你現(xiàn)在要從 A 地點(diǎn)送 10 件貨到 B 地點(diǎn),你可以選擇 1 次送 1 件,送 10 次的方案;也可以選擇 1 次送 10 件,送 1 次的方案,請(qǐng)問你會(huì)選擇哪種?這就是多次循環(huán)插入和批量一次插入的問題。

  • PS:要插入的數(shù)據(jù)量越大,批量插入的時(shí)間(相比于循環(huán)多次插入來說)也越短、其優(yōu)勢(shì)也越大。

批量插入實(shí)現(xiàn)方案

本文我們使用 MyBatis-Plus(下文簡(jiǎn)稱 MP)自帶的 saveBatch 方法,來實(shí)現(xiàn)數(shù)據(jù)的批量插入功能,因?yàn)?MP 不是本文討論的重點(diǎn),所以這里咱們就不介紹了,如果有不熟悉的朋友可以去他的官方自行惡補(bǔ):https://baomidou.com/guide/,咱們本文重點(diǎn)介紹一下 MP 實(shí)現(xiàn)批量插入的具體步驟。

1.引入 MP 框架

首先,打開您的 pom.xml 文件,在文件中添加以下內(nèi)容:

  1. <dependency> 
  2.     <groupId>com.baomidou</groupId> 
  3.     <artifactId>mybatis-plus-boot-starter</artifactId> 
  4.     <version>mybatis-plus-latest-version</version> 
  5. </dependency> 

注意:mybatis-plus-latest-version 表示 MP 框架的最新版本號(hào),可訪問 https://mvnrepository.com/artifact/com.baomidou/mybatis-plus-boot-starter 查詢最新版本號(hào),但在使用的時(shí)候記得一定要將上面的 “mybatis-plus-latest-version”替換成換成具體的版本號(hào),如 3.4.3 才能正常的引入框架。

2.創(chuàng)建數(shù)據(jù)庫和表

此步驟可省略,主要用于本文功能的實(shí)現(xiàn),創(chuàng)建數(shù)據(jù)庫和數(shù)據(jù)表的腳本如下:

  1. -- ---------------------------- 
  2. -- 創(chuàng)建數(shù)據(jù)庫 
  3. -- ---------------------------- 
  4. SETNAMES utf8mb4; 
  5. SET FOREIGN_KEY_CHECKS = 0; 
  6. DROPDATABASEIFEXISTS`testdb`; 
  7. CREATEDATABASE`testdb`; 
  8. USE`testdb`; 
  9.  
  10. -- ---------------------------- 
  11. -- 創(chuàng)建 user 表 
  12. -- ---------------------------- 
  13. DROPTABLEIFEXISTS`user`; 
  14. CREATETABLE`user`  ( 
  15.   `id`int(11) NOTNULL AUTO_INCREMENT, 
  16.   `name`varchar(255) CHARACTERSET utf8mb4 COLLATE utf8mb4_bin NULLDEFAULTNULL, 
  17.   `password`varchar(255) CHARACTERSET utf8mb4 COLLATE utf8mb4_bin NULLDEFAULTNULL, 
  18.   `createtime` datetime NULLDEFAULTCURRENT_TIMESTAMP, 
  19.   PRIMARY KEY (`id`) USING BTREE 
  20. ) ENGINE = InnoDB AUTO_INCREMENT = 6CHARACTERSET = utf8mb4 COLLATE = utf8mb4_bin ROW_FORMAT = Dynamic
  21.  
  22. -- ---------------------------- 
  23. -- 添加測(cè)試數(shù)據(jù) 
  24. -- ---------------------------- 
  25. INSERTINTO`user`VALUES (1, '趙云''123456''2021-09-10 18:11:16'); 
  26. INSERTINTO`user`VALUES (2, '張飛''123456''2021-09-10 18:11:28'); 
  27. INSERTINTO`user`VALUES (3, '關(guān)羽''123456''2021-09-10 18:11:34'); 
  28. INSERTINTO`user`VALUES (4, '劉備''123456''2021-09-10 18:11:41'); 
  29. INSERTINTO`user`VALUES (5, '曹操''123456''2021-09-10 18:12:02'); 
  30.  
  31. SET FOREIGN_KEY_CHECKS = 1; 

3.具體代碼實(shí)現(xiàn)(重點(diǎn))

① 實(shí)體類

先來創(chuàng)建數(shù)據(jù)庫所對(duì)應(yīng)的 User 實(shí)體類:

  1. import lombok.Getter; 
  2. import lombok.Setter; 
  3.  
  4. import java.util.Date
  5.  
  6. @Getter 
  7. @Setter 
  8. publicclass User { 
  9.     privateint id; 
  10.     private String name
  11.     private String password
  12.     private Date createtime; 

② Controller 層代碼

本文的核心是使用 MP 框架中,IService 類提供的 saveBatch 方法,來實(shí)現(xiàn)批量數(shù)據(jù)的插入功能,對(duì)應(yīng)在 Controller 中的實(shí)現(xiàn)代碼如下:

  1. import com.example.demo.model.User
  2. import com.example.demo.service.impl.UserServiceImpl; 
  3. import org.springframework.beans.factory.annotation.Autowired; 
  4. import org.springframework.web.bind.annotation.RequestMapping; 
  5. import org.springframework.web.bind.annotation.RestController; 
  6.  
  7. import java.util.ArrayList; 
  8. import java.util.List; 
  9.  
  10. @RestController 
  11. @RequestMapping("/u"
  12. publicclass UserController { 
  13.  
  14.     @Autowired 
  15.     private UserServiceImpl userService; 
  16.  
  17.     /** 
  18.      * MP 批量插入 
  19.      */ 
  20.     @RequestMapping("/savebatch"
  21.     public boolean saveBatch() { 
  22.         List<User> list = new ArrayList<>(); 
  23.         // 待添加(用戶)數(shù)據(jù) 
  24.         for (int i = 0; i < 1000; i++) { 
  25.             User user = new User(); 
  26.             user.setName("test:"+i); 
  27.             user.setPassword("123456"); 
  28.             list.add(user); 
  29.         } 
  30.         // 批量插入 
  31.         return userService.saveBatch(list); 
  32.     } 

③ Service 層代碼(重點(diǎn))

接下來,我們要?jiǎng)?chuàng)建一個(gè) UserService 接口,繼承 MP 框架中的 IService 接口,實(shí)現(xiàn)代碼如下:

  1. import com.baomidou.mybatisplus.extension.service.IService; 
  2. import com.example.demo.model.User
  3.  
  4. publicinterface UserService extends IService<User> { 
  5.  

然后再創(chuàng)建一個(gè) UserService 的實(shí)現(xiàn)類:

  1. import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; 
  2. import com.example.demo.mapper.UserMapper; 
  3. import com.example.demo.model.User
  4. import com.example.demo.service.UserService; 
  5. import org.springframework.stereotype.Service; 
  6.  
  7. @Service 
  8. publicclass UserServiceImpl extends ServiceImpl<UserMapper,User
  9.         implements UserService { 
  10.  
  • PS:注意 UserServiceImpl 必須要繼承 MP 框架中的 ServiceImpl,不然要重寫很多方法。

④ Mapper 層代碼

Mapper 層的實(shí)現(xiàn)相對(duì)來說就比較簡(jiǎn)單了,只需要?jiǎng)?chuàng)建一個(gè) Mapper 類繼承 MP 框架中的 BaseMapper 類即可,實(shí)現(xiàn)代碼如下:

  1. import com.baomidou.mybatisplus.core.mapper.BaseMapper; 
  2. import com.example.demo.model.User
  3. import org.apache.ibatis.annotations.Mapper; 
  4.  
  5. @Mapper 
  6. publicinterface UserMapper extends BaseMapper<User>{ 
  7.  
  • PS:BaseMapper 提供了對(duì)某個(gè)對(duì)象(類)最基礎(chǔ)的 CRUD 操作。

總結(jié)

本文我們介紹了 MP(MyBatis Plus)中實(shí)現(xiàn)批量插入的具體實(shí)現(xiàn)步驟,它的核心是通過調(diào)用 MP 中 IService 提供的 saveBatch 方法來完成的,但如果項(xiàng)目中沒有引入 MP 框架該如何處理?是不是使用了 MP 就可以躺平了呢?

不著急,下篇我們?cè)倭呐坎迦氲牧硪环N方式(原生批量插入的實(shí)現(xiàn)方式),以及二者之間的優(yōu)缺點(diǎn)分析。

 

責(zé)任編輯:姜華 來源: Java中文社群
相關(guān)推薦

2022-09-29 10:06:56

SQLMySQL服務(wù)端

2023-06-07 08:00:00

MySQL批量插入

2024-07-31 09:56:20

2024-11-28 19:03:56

2021-10-09 06:59:36

技術(shù)MyBatis數(shù)據(jù)

2023-12-30 20:04:51

MyBatis框架數(shù)據(jù)

2022-09-23 09:44:17

MyBatisforeach

2013-04-01 15:03:58

Android開發(fā)Android批量插入

2022-12-29 08:49:40

SpringBootExcel

2021-10-18 07:58:33

MyBatis Plu數(shù)據(jù)庫批量插入

2021-04-08 10:55:53

MySQL數(shù)據(jù)庫代碼

2024-12-20 16:49:15

MyBatis開發(fā)代碼

2011-08-04 18:00:47

SQLite數(shù)據(jù)庫批量數(shù)據(jù)

2021-11-19 11:50:48

MyBatisforeachJava

2021-02-01 00:04:13

Dictionary數(shù)據(jù)批量

2024-10-22 08:47:03

2023-06-07 08:08:37

MybatisSpringBoot

2010-09-03 11:47:38

SQL刪除

2010-09-01 16:26:11

SQL刪除批量

2022-08-24 08:07:11

MyBatisSQLMySQL
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)