給你的MyBatis-Plus裝上批量插入的翅膀

2020-09-24 Java成長催化師

前言

大家有用過MyBatis-Plus(簡稱MP)的都知道它是一個MyBatis的增強工具,旨在MyBatis的基礎上只做增強不做改變,為簡化開發、提高效率而生。

特點

  • 無侵入:只做增強不做改變,引入它不會對現有工程產生影響,如絲般順滑
  • 損耗小:啟動即會自動注入基本 CURD,性能基本無損耗,直接面向對象操作
  • 強大的 CRUD 操作:內置通用 Mapper、通用 Service,僅僅通過少量配置即可實現單表大部分 CRUD 操作,更有強大的條件構造器,滿足各類使用需求
  • 支持 Lambda 形式調用:通過 Lambda 表達式,方便的編寫各類查詢條件,無需再擔心欄位寫錯
  • 支持主鍵自動生成:支持多達 4 種主鍵策略(內含分布式唯一 ID 生成器 - Sequence),可自由配置,完美解決主鍵問題
  • 支持 ActiveRecord 模式:支持 ActiveRecord 形式調用,實體類只需繼承 Model 類即可進行強大的 CRUD 操作
  • 支持自定義全局通用操作:支持全局通用方法注入( Write once, use anywhere )
  • 內置代碼生成器:採用代碼或者 Maven 插件可快速生成 Mapper 、 Model 、 Service 、 Controller 層代碼,支持模板引擎,更有超多自定義配置等您來使用
  • 內置分頁插件:基於 MyBatis 物理分頁,開發者無需關心具體操作,配置好插件之後,寫分頁等同於普通 List 查詢
  • 分頁插件支持多種資料庫:支持 MySQL、MariaDB、Oracle、DB2、H2、HSQL、SQLite、Postgre、SQLServer 等多種資料庫
  • 內置性能分析插件:可輸出 Sql 語句以及其執行時間,建議開發測試時啟用該功能,能快速揪出慢查詢
  • 內置全局攔截插件:提供全表 delete 、 update 操作智能分析阻斷,也可自定義攔截規則,預防誤操作

正文

在實際項目開發中,我們常常有把數據批量保存到資料庫的需求,大家或多或少的用mybatis-plus實現過吧?

組件依賴

首先我們要通過Maven引入mybatis-plus 開源組件,在pom.xml文件加入下面的代碼:

<!--mybatis--><dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-boot-starter</artifactId> <version>3.4.0</version></dependency><!--mybatis plus extension,包含了mybatis plus core--><dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-extension</artifactId> <version>3.4.0</version></dependency>

通過查看源碼發現API接口提供的批量插入的接口:

啟動服務後,用Postman調試,後臺列印如下:

從圖上可以看出這個所謂的批量插入接口,其實就是一個for循環插入,Oh,My God!簡直就是噩夢一般.

難不成要手工實現,這樣,

INSERT INTO test (a, b, c) VALUES<foreach collection=&34; item=&34; separator=&34;> ({item.b}, #{item.c})</foreach>

我們閱讀mybatis-plus的源碼,在com.baomidou.mybatisplus.extension.injector.methods.InsertBatchSomeColumn包中其實是有批量插入代碼實現的,這裡我就不貼源碼了,大家自行跟蹤一下.我們來手工擴展一下:

擴展代碼

Talk is cheap, show me the code.先展示代碼.再帶大家慢慢解釋為什麼這樣實現:

在MybatisPlusConfig文件中注入該Bean,代碼如下:

@Configurationpublic class MybatisPlusConfig { /** * 分頁插件 * * @return PaginationInterceptor */ @Bean public PaginationInterceptor paginationInterceptor() { return new PaginationInterceptor(); } @Bean public EasySqlInjector easySqlInjector() { return new EasySqlInjector(); }}

還要擴展一下自帶的BaseMapper,代碼如下:

import com.baomidou.mybatisplus.core.mapper.BaseMapper;import java.util.Collection;/** * 擴展通用 Mapper,支持數據批量插入 * * @author 天開易想 */public interface EasyBaseMapper<T> extends BaseMapper<T> { /** * 批量插入 僅適用於mysql * * @param entityList 實體列表 * @return 影響行數 */ Integer insertBatchSomeColumn(Collection<T> entityList);}

我們即可在業務類中,實現下面的引用了,代碼如下:

/** * 定義業務mapper接口,繼承剛剛擴展的EasyBaseMapper * * @author 天開易想 */@Mapperpublic interface TestMapper extends EasyBaseMapper<Test> {}/** * 業務實現類接口,即可引用 * * @author 天開易想 */@Servicepublic class TestServiceImpl extends ServiceImpl<TestMapper, Test> implements TestService { @Override public Integer testBatch(Collection<Test> testList) { return baseMapper.insertBatchSomeColumn(testList); }

因為在BaseMapper中是不能拿來直接引用的,為什麼不能直接引用,據說是只支持MySql資料庫,所以作者沒有內置的原因吧!

來源:https://www.tuicool.com/articles/qqme2qa

相關焦點

  • MyBatis-Plus為啥這麼牛?
    ,大家或多或少的用mybatis-plus實現過吧?組件依賴首先我們要通過Maven引入mybatis-plus 開源組件,在pom.xml文件加入下面的代碼:<!--mybatis--><dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId>
  • MyBatis Plus 為啥這麼牛
    ,大家還是多或少的用mybatis-plus實現過吧?--mybatis--><dependency>    <groupId>com.baomidou</groupId>    <artifactId>mybatis-plus-boot-starter</artifactId>   
  • MyBatis Plus 為啥這麼牛?
    ,大家還是多或少的用mybatis-plus實現過吧?組件依賴首先我們要通過Maven mybatis-plus開源組件,在pom.xml文件中加入以下代碼:<!--mybatis plus extension,包含了mybatis plus core--><dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-extension</artifactId> <version>3.4.0&
  • SpringBoot集成mybatis-plus
    <artifactId>druid-spring-boot-starter</artifactId> <version>1.1.12</version></dependency><dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-boot-starter
  • 詳解mybatis和Mybatis-Plus區別
    至於標題說的↓Mybatis Plus:國人團隊苞米豆在Mybatis的基礎上開發的框架,在Mybatis基礎上擴展了許多功能,榮獲了2018最受歡迎國產開源軟體第5名,當然也有配套的↓Mybatis Plus Generator:同樣為苞米豆開發,比Mybatis Generator更加強大,支持功能更多,自動生成Entity、Mapper、Service、Controller等
  • Spring boot怎麼整合Mybatis-plus
    -- mybatis plus 代碼生成器依賴 --><dependency>    <groupId>com.baomidou</groupId>    <artifactId>mybatis-plus-generator<
  • mybatis-plus思維導圖,讓mybatis-plus不再難懂
    mybatis-plus而mybatis-plus這樣一個框架,一種集mybatis與hibernate的優點一起的框架。它提供了hibernate的單表CRUD操作的方便同時,又保留了mybatis的特性。
  • mybatis plus 與mybatis的選擇
    mybatis plus是mybatis的封裝,可以做到簡化xml的效果,完全去除xml化,實現orm層的分離,mybatis雖然是hrbernate後的另一大框架,同時其xml的配置也隨著去xml配置時代的而成為阻礙敏捷開發的標準.隨著mybatis plus的出現,orm的框架又將有一次提升
  • mybatis升級為mybatis-plus踩到的坑
    這個平臺目前的orm框架是mybatis,而項目組的orm框架是mybatis-plus。為了統一技術棧,項目組就決定把若依的orm框架升級為mybatis-plus。因為之前就有過把mybatis升級為mybatis-plus的經驗,就感覺這個升級是很簡單。
  • 使用MyBatis-Plus兵器棧開發集合
    而且支持分頁插件,幾乎支持市面上所有的流行資料庫以及國產資料庫。導入相應的依賴說明:我們使用mybatis-plus可以節省我們大量的代碼,儘量不要同時導入mybatis和mybatis-plus!4.編寫代碼使用mybatis-plus
  • mybatis攔截器實現主鍵自動生成
    朋友問我有沒有什麼實現思路,他們公司的orm框架是mybatis,我就建議他說,不然讓你老大把mybatis切換成mybatis-plus。mybatis-plus就支持註解式的id自動生成,而且mybatis-plus只是對mybatis進行增強不做改變。朋友還是那句話,說為了項目穩定,之前項目組沒有使用mybatis-plus的經驗,貿然切換不知道會不會有什麼坑。後面沒招了,我就跟他說不然你用mybatis的攔截器實現一個吧。於是又有一篇吹水的創作題材出現。
  • MyBatis-Plus快速入門(一)
    MP是一個MyBatis的增強工具,在MyBatis的基礎上只做增強不做改變。支持資料庫mysql 、 mariadb 、 oracle 、 db2 、 h2 、 hsql 、 sqlite 、 postgresql 、 sqlserver達夢資料庫 、虛谷資料庫 、人大金倉資料庫快速體驗1、建立資料庫mybatis-plus
  • MyBatis-Plus系列之代碼生成器
    mybatis-plus-code-generator 工程介紹工程地址:mybatis-plus-code-generator:https://github.com/fengwenyi/mybatis-plus-code-generator目錄結構:
  • 基於MyBatis 來實現對敏感數據在進出DB時候進行脫敏處理
    下載最新的jar包 mybatis-cipher-plus使用說明配置初始化spring boot 模式 零配置模式配置加解密攔截器/** *: type-aliases-package: org.xiaoweige.mybatis.cipher.example.model.po mapper-locations: - classpath:mybatis/mappers/*.xml - classpath:mybatis/mappers/*/*.xml configuration-properties
  • mybatis 分頁插件 mybatis-plus-page
    mybatis-plus-page 詳細介紹mybatis分頁插件MicroPageInterceptor 特點:1, 支持mysql和oracle分頁2, 不必在xml編寫統計count的sql3, 使用RowBounds子類PageInfo
  • Mybatis-plus常用API全套教程,看完沒有不懂的
    創建資料庫資料庫名為mybatis_plus創建表創建user表DROP TABLE IF EXISTS-- mybatis-plus --><!-- mybatis-plus 是自己開發,並非官方的!
  • 【SpringBoot DB系列】Mybatis-Plus 代碼自動生成
    一個簡單的實例工程,介紹利用 mybatis-plus 的代碼自動生成插件,根據表結構來生成對應的類和 xml 配置文件;    <dependency>        <groupId>com.baomidou</groupId>        <artifactId>mybatis-plus-generator
  • mybatis-plus 2.1.8 發布,代號:囍
    mybatis-plus 是一款 mybatis 動態 SQL 自動注入 mybatis 增刪改查 CRUD 操作中間件。
  • mybatis-plus 2.1.8-SNAPSHOT 發布,代號:翻車魚
    mybatis-plus 是一款 mybatis 動態 SQL 自動注入 mybatis 增刪改查 CURD&nbsp;操作中間件。
  • mybatis-plus 2.1.9 發布,代號:懷念
    mybatis-plus 是一款 mybatis 動態 SQL 自動注入 mybatis 增刪改查 CRUD 操作中間件。讓 mybatis 擁有 hibernate 的單表高效,也保留 xml sql 的靈動, 減少你的開發周期優化動態維護 xml 實體欄位,您再也不要羨慕不需要糾結是選擇 hibernate 還是 jpa 呢?請記住還有 MP 2018 不容錯過。