MyBatis-Plus為啥這麼牛?

2020-12-24 酷扯兒

本文轉載自【微信公眾號:java進階架構師,ID:java_jiagoushi】經微信公眾號授權轉載,如需轉載與原文作者聯繫

前言

大家有用過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-->

<artifactId>mybatis-plus-extension</artifactId>

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

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

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

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

INSERT INTO test (a, b, c) VALUES

<foreach collection="list" item="item" separator=",">

(#{item.a}, #{item.b}, #{item.c})

</foreach>

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

擴展代碼

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

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

@Configuration

public class MybatisPlusConfig {

/**

* 分頁插件

*

* @return PaginationInterceptor

*/

@Bean

public PaginationInterceptor paginationInterceptor() {

return new PaginationInterceptor();

}

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

@Mapper

public interface TestMapper extends EasyBaseMapper<Test> {

* 業務實現類接口,即可引用

@Service

public class TestServiceImpl extends ServiceImpl<TestMapper, Test> implements TestService {

@Override

public Integer testBatch(Collection<Test> testList) {

return baseMapper.insertBatchSomeColumn(testList);

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

相關焦點

  • MyBatis Plus 為啥這麼牛?
    內置性能分析插件:可輸出Sql語句以及其執行時間,建議開發測試時啟用該功能,能快速揪出慢查詢內置的攔截插件:提供全表delete,update操作智能分析中斷,也可自定義攔截規則,預防誤操作正文在實際項目開發中,我們常常有把數據批量保存到資料庫的需求,大家還是多或少的用mybatis-plus
  • 用mybatis-plus不會使用樂觀鎖,處理重要數據容易出錯
    接下來小編將介紹如何在mybatis-plus項目中,添加樂觀鎖。3 創建項目先創建一個集成了mybatis-plus的spring boot項目。參考小編的另一篇文章【基於Spring Boot整合mybatis-plus完整詳細版經驗分享一】。
  • 使用mybatis-plus必須掌握的基本技能,自定義SQL和分頁查詢
    1 創建項目先創建一個集成了mybatis-plus的spring boot項目。參考小編的另一篇文章【基於Spring Boot整合mybatis-plus完整詳細版經驗分享一】。2 自定義SQLMybatis-plus自帶的條件構造器雖然很強大,在項目實戰的時候,各種複雜的應用場景,你肯定避免不了要寫稍微複雜一點的sql語句,又或者一些朋友習慣通過寫sql來操作數據,那麼小編來說說mybatis-puls是怎麼自定義sql語句。
  • Mybatis-Plus和Mybatis你了解多少呢?
    畢竟MP只是mybatis的增強工具,它並沒有侵入mybatis的原生功能,在使用MP的增強功能的同時,原生mybatis的功能依然是可以正常使用的
  • 比mybatis 強大優雅的 sqltoy-orm-4.11.6 發版了
    在目前有這麼多ORM框架的情況下,再搞一個開源框架的前提就是必須要比之前的好很多,而在中國如果不超過mybatis(plus)就根本沒有必要投入精力做這件事!因為大家知道開源就是在別人忙掙錢或者玩樂的時候而你卻在不計得失的奉獻!而我希望給大家奉獻一個真正有趣的有靈魂的框架!
  • mybatis的Configuration的屬性設置
    propertiesElement方法分析首先第一行執行的是propertiesElement(root.evalNode("properties"));可以看到是拿到mybatis配置文件中properties節點內容然後執行propertiesElement,我們看到propertiesElement
  • MyBatis系列:框架概要介紹
    2、官網地址https://mybatis.org/mybatis-3/3、為什麼要學習MyBatis框架3.1、ORM【對象關係映射】O:ObjectR:Relationshipmybatis讓開發者將主要精力放在sql上,通過mybatis提供的映射方式可以很靈活的寫出滿足需要sql語句,換句話說,mybatis可以將向preparedStatement中的輸入參數自動進行輸入映射,將查詢結果集靈活映射成java對象。
  • Mybatis初始化過程簡單總結
    前面連續多篇文章都是在數據mybatis的初始化過程,目前基本完成,是時候做一個總結了。所以SqlSessionFactory的初始化實際上是mybatis的全局配置類Configuration的初始化。而它的初始通過XMLConfigBuilder的parse方法實現。
  • Mybatis的SqlSession創建過程詳解
    前面mybatis的初始化過程分析完成,接下來是第二步SqlSession的創建。創建過程總覽SqlSession創建過程如下圖:創建過程還是比較簡單的,首先是之前分析的SqlSessionFactory,在mybatis中提供了兩個SqlSessionFactory實現:SqlSessionManager和DefaultSqlSessionFactory
  • 「mybatis-plus」什麼是樂觀鎖?如何實現「樂觀鎖」
    package com.pingguo.mpdemo.config;import com.baomidou.mybatisplus.extension.plugins.OptimisticLockerInterceptor;import org.mybatis.spring.annotation.MapperScan;import org.springframework.context.annotation.Bean
  • 小學妹問:Mybatis常見註解有哪些?
    org.mybatis.spring.annotation.MapperScan使用方式@SpringBootApplication@MapperScan("com.tian.mybatis.mapper")public class Application {}
  • 大佬的Mybatis-Plus使用技巧,帶你避「坑」,實在太火了~
    delval = "0")private Integer delFlag;1234value = 「」 默認的原值,delval = 「」 刪除後的值mybatis-plus
  • 使用mybatis框架,完成增刪改查操作
    mybatis框架的繼續學習,安排如下:對昨天學習的內容做個小結,其中補充一個昨天忽視的問題。資料庫無外乎就是增刪改查,所以使用mybatis做一個完整的crud操作。一、mybatis使用步驟回顧主要是涉及到配置文件的編寫,其中又包含核心配置文件和映射文件。創建mybatis-config.xml核心配置文件。
  • 看到Mybatis源碼就感到煩躁,怎麼辦?
    Mybatis源碼分析今天,我們就來看看Mybatis源碼的閱讀,具體舉個例子來看看:案例和疑問從我們最初的demo中開始:publicstaticvoidmain(String[] args) { String resource = "mybatis-config.xml
  • 老生常談:為啥日本高中生踢球也這麼牛逼?難道就因為新垣結衣嗎?
    老生常談:為啥日本高中生踢球也這麼牛逼?難道就因為新垣結衣嗎?
  • SpringBoot + MyBatis + MySQL讀寫分離實踐!
    <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.mybatis.spring.boot
  • mybatis框架之多表高級查詢
    mybatis中的高級查詢,即多表關聯查詢。主要分為:一對一查詢,一對多查詢,多對多查詢,本來打算全學完的,奈何計劃趕不上變化。當然具體如何優化sql語句,應該沒這麼簡單,我只是以此引出sql片段這個知識點。如果每次都要書寫這麼長的sql語句,顯然是一件很麻煩的事情。
  • 為啥說「只有累死的牛,沒有耕壞的田」?這是有科學依據的!
    牛是我們從古至今的生活中最離不開的一個物種,無論是生產生活還是飲食文化中,都有這種動物做出的貢獻。尤其是在農業的發展上,更是需要牛的協助才能完成很多的重活累活。可以說牛在人類歷史發展上的作用十分深遠。關於牛的作用還有這麼一句話,「只有累死的牛,沒有耕壞的田」。今天就來了解一下,為啥說「只有累死的牛,沒有耕壞的田」呢?這是有科學依據的!過去人們的生活和經濟來源都源於農耕,而農耕最重要的勞動力就是耕牛。過去的農田不像如今這樣,能夠有很多先進的科技來改良土壤環境。只能靠勞動力來完成耕作。