成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

MyBatis Plus 批量數據插入功能,yyds!

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

[[425955]]

作者 | 王磊

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

轉載請聯系授權(微信ID:GG_Stone

最近 Review 小伙伴代碼的時候,發現了一個小小的問題,小伙伴竟然在 for 循環中進行了 insert (插入)數據庫的操作,這就會導致每次循環時都會進行連接、插入、斷開連接的操作,從而導致一定的性能問題,簡化后代碼如下:

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

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

  • PS:要插入的數據量越大,批量插入的時間(相比于循環多次插入來說)也越短、其優勢也越大。

批量插入實現方案

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

1.引入 MP 框架

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

  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 框架的最新版本號,可訪問 https://mvnrepository.com/artifact/com.baomidou/mybatis-plus-boot-starter 查詢最新版本號,但在使用的時候記得一定要將上面的 “mybatis-plus-latest-version”替換成換成具體的版本號,如 3.4.3 才能正常的引入框架。

2.創建數據庫和表

此步驟可省略,主要用于本文功能的實現,創建數據庫和數據表的腳本如下:

  1. -- ---------------------------- 
  2. -- 創建數據庫 
  3. -- ---------------------------- 
  4. SETNAMES utf8mb4; 
  5. SET FOREIGN_KEY_CHECKS = 0; 
  6. DROPDATABASEIFEXISTS`testdb`; 
  7. CREATEDATABASE`testdb`; 
  8. USE`testdb`; 
  9.  
  10. -- ---------------------------- 
  11. -- 創建 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. -- 添加測試數據 
  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, '關羽''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.具體代碼實現(重點)

① 實體類

先來創建數據庫所對應的 User 實體類:

  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 方法,來實現批量數據的插入功能,對應在 Controller 中的實現代碼如下:

  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.         // 待添加(用戶)數據 
  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 層代碼(重點)

接下來,我們要創建一個 UserService 接口,繼承 MP 框架中的 IService 接口,實現代碼如下:

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

然后再創建一個 UserService 的實現類:

  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 層的實現相對來說就比較簡單了,只需要創建一個 Mapper 類繼承 MP 框架中的 BaseMapper 類即可,實現代碼如下:

  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 提供了對某個對象(類)最基礎的 CRUD 操作。

總結

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

不著急,下篇我們再聊批量插入的另一種方式(原生批量插入的實現方式),以及二者之間的優缺點分析。

 

責任編輯:姜華 來源: Java中文社群
相關推薦

2022-09-29 10:06:56

SQLMySQL服務端

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

技術MyBatis數據

2023-12-30 20:04:51

MyBatis框架數據

2013-04-01 15:03:58

Android開發Android批量插入

2022-09-23 09:44:17

MyBatisforeach

2022-12-29 08:49:40

SpringBootExcel

2021-10-18 07:58:33

MyBatis Plu數據庫批量插入

2021-04-08 10:55:53

MySQL數據庫代碼

2024-12-20 16:49:15

MyBatis開發代碼

2021-02-01 00:04:13

Dictionary數據批量

2024-10-22 08:47:03

2011-08-04 18:00:47

SQLite數據庫批量數據

2010-09-03 11:47:38

SQL刪除

2021-11-19 11:50:48

MyBatisforeachJava

2023-06-07 08:08:37

MybatisSpringBoot

2010-09-01 16:26:11

SQL刪除批量

2022-08-24 08:07:11

MyBatisSQLMySQL
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 国产一区二区精品在线观看 | 成人精品久久 | 国产欧美视频一区 | 欧洲一区二区三区 | 亚洲综合一区二区三区 | 亚洲综合天堂 | 亚洲最大av| 国产精品国产a级 | 日本国产一区二区 | 淫片一级国产 | 国产一区二区成人 | 伊人网站 | 亚洲第一av| 美女久久久久 | 一区二区三区欧美 | av天天看| 成人欧美一区二区三区1314 | 中文字幕男人的天堂 | 91久久精品一区二区二区 | 欧美激情在线精品一区二区三区 | 男女爱爱网站 | 欧美亚洲在线 | 国产内谢| 国产精品久久欧美久久一区 | 天堂中文在线播放 | 亚洲精品国产综合区久久久久久久 | 国产精品福利在线 | 亚洲欧美国产毛片在线 | 欧美在线视频二区 | 国产欧美精品在线 | 国产做a爱片久久毛片 | 超碰精品在线观看 | 欧美精品一区二区三区在线播放 | 成人免费看黄 | 亚洲精品一区二区三区 | 81精品国产乱码久久久久久 | 免费视频一区二区三区在线观看 | 麻豆va| 久久久免费在线观看 | 成人精品视频在线观看 | 一区二区免费看 |