最近 Review 小夥伴代碼的時候,發現了一個小小的問題,小夥伴竟然在 for 循環中進行了 insert (插入)資料庫的操作,這就會導緻每次循環時都會進行連接配接、插入、斷開連接配接的操作,進而導緻一定的性能問題,簡化後代碼如下:
這樣做并不會改變程式最終的執行結果,但會對程式的執行效率帶來很大的影響,就好比你現在要從 A 地點送 10 件貨到 B 地點,你可以選擇 1 次送 1 件,送 10 次的方案;也可以選擇 1 次送 10 件,送 1 次的方案,請問你會選擇哪種?這就是多次循環插入和批量一次插入的問題。
PS:要插入的資料量越大,批量插入的時間(相比于循環多次插入來說)也越短、其優勢也越大。
本文我們使用 MyBatis-Plus(下文簡稱 MP)自帶的 saveBatch 方法,來實作資料的批量插入功能,因為 MP 不是本文讨論的重點,是以這裡咱們就不介紹了,如果有不熟悉的朋友可以去他的官方自行惡補:https://baomidou.com/guide/,咱們本文重點介紹一下 MP 實作批量插入的具體步驟。
首先,打開您的 pom.xml 檔案,在檔案中添加以下内容:
注意:mybatis-plus-latest-version 表示 MP 架構的最新版本号,可通路 https://mvnrepository.com/artifact/com.baomidou/mybatis-plus-boot-starter 查詢最新版本号,但在使用的時候記得一定要将上面的 “mybatis-plus-latest-version”替換成換成具體的版本号,如 3.4.3 才能正常的引入架構。
此步驟可省略,主要用于本文功能的實作,建立資料庫和資料表的腳本如下:
先來建立資料庫所對應的 User 實體類:
本文的核心是使用 MP 架構中,IService 類提供的 saveBatch 方法,來實作批量資料的插入功能,對應在 Controller 中的實作代碼如下:
接下來,我們要建立一個 UserService 接口,繼承 MP 架構中的 IService 接口,實作代碼如下:
然後再建立一個 UserService 的實作類:
PS:注意 UserServiceImpl 必須要繼承 MP 架構中的 ServiceImpl,不然要重寫很多方法。
Mapper 層的實作相對來說就比較簡單了,隻需要建立一個 Mapper 類繼承 MP 架構中的 BaseMapper 類即可,實作代碼如下:
PS:BaseMapper 提供了對某個對象(類)最基礎的 CRUD 操作。
本文我們介紹了 MP(MyBatis Plus)中實作批量插入的具體實作步驟,它的核心是通過調用 MP 中 IService 提供的 saveBatch 方法來完成的,但如果項目中沒有引入 MP 架構該如何處理?是不是使用了 MP 就可以躺平了呢?不着急,下篇我們再聊批量插入的另一種方式(原生批量插入的實作方式),以及二者之間的優缺點分析。
關注公号「Java中文社群」檢視更多 MyBatis 和 Spring Boot 的系列文章。
關注下面二維碼,訂閱更多精彩内容。
關注公衆号(加好友):
作者:
王磊的部落格
出處:
http://vipstone.cnblogs.com/