太火了!MyBatis Plus 為啥這麼牛?

2020-12-15 Java技術架構

來源:cnblogs.com/thinkYi/p/13723035.html

特色正文組件依賴擴展代碼大家有用過MyBatis-Plus(簡稱MP)的都知道它是一個 MyBatis 的增強工具,致力於 MyBatis 的基礎上只做增強不做改變,為簡化開發,提高效率而生。

特色

無侵入:只做增強不做改變,約會它不會對現有工程產生影響,如絲般順滑損耗小:啟動即會自動注入基本CURD,性能基本無損耗,直接面向對象操作強大的CRUD操作:內置通用Mapper,通用服務,僅通過少量配置即可實現單表大部分CRUD操作,足以強大的條件構造器,滿足各種使用需求支持Lambda形式調用:通過Lambda表達式,方便的編寫分類查詢條件,無需再擔心替換寫錯支持主鍵自動生成:支持多達4種主鍵策略(內部含分布式唯一ID生成器-序列),可自由配置,完美解決主鍵問題支持ActiveRecord模式:支持ActiveRecord形式調用,實體類只需繼承Model類即可進行強大的CRUD操作支持自定義通用通用操作:支持通用通用方法注入(寫一次,可在任何地方使用)內置代碼生成器:採用代碼或Maven插件可快速生成Mapper,Model,Service,Controller層代碼,支持模板引擎,甚至超多自定義配置等您來使用內置分頁插件:基於MyBatis物理分頁,開發者無需關心特定操作,配置好插件之後,寫分頁等同於普通列表查詢分頁插件支持多種資料庫:支持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調試,後臺列印如下:

從圖上可以拋光這個所謂的批量插入接口,其實就是一個用於循環插入,哦,我的天!

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

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包中其實是有很多插入代碼實現的,這裡我就不貼標籤了,大家自行跟蹤一下。我們來手工擴展一下:

擴展代碼

說話便宜,給我看看代碼。先展示代碼。再帶大家慢慢解釋為什麼這樣實現:

在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 資料庫,所以作者沒有內置的原因吧!

到這裡,我們的批量插入功能就大功告成!

相關焦點

  • MyBatis-Plus為啥這麼牛?
    建議開發測試時啟用該功能,能快速揪出慢查詢內置全局攔截插件:提供全表 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-Plus使用技巧,帶你避「坑」,實在太火了~
    delval = "0")private Integer delFlag;1234value = 「」 默認的原值,delval = 「」 刪除後的值mybatis-plus
  • 比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
  • 搞不懂為啥兵長和艾倫的cp這麼火
    搞不懂為啥兵長和艾倫的cp這麼火#(陰險) 感覺他倆連朋友都不算啊,艾倫一心追隨自由,兵長宿主是團長,而且後期劇情這麼緊湊跌宕,扯cp不是拉低格局麼。#(陰險) 兵長心裡稱得上朋友的應該也就韓吉和艾爾文吧,艾倫的話米卡莎和阿爾敏。
  • 「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 {}
  • 為啥突然就火了?
    為啥突然就火了?該梗出自《青春有你2》Melody小隊李熙凝的rap。由於李熙凝絲毫不會rap,唱的結果既不像Rap又不像朗讀,節奏混亂,氣若遊絲,吟唱的效果尬穿地心。而且教也教不會,完全沒什麼基礎的樣子,讓人十分懷疑是怎麼被選拔上來的,加上指導老師對她的rap的差勁最為震驚,也讓觀眾記住了這句歌詞。
  • 使用mybatis框架,完成增刪改查操作
    mybatis框架的繼續學習,安排如下:對昨天學習的內容做個小結,其中補充一個昨天忽視的問題。資料庫無外乎就是增刪改查,所以使用mybatis做一個完整的crud操作。一、mybatis使用步驟回顧主要是涉及到配置文件的編寫,其中又包含核心配置文件和映射文件。創建mybatis-config.xml核心配置文件。
  • 馮鞏為啥這麼牛?認識他太爺爺馮國璋,卻不知他爺爺更牛
    一直以來馮鞏是非常低調的,很多有人不知道他的家世,其實馮鞏是一位大戶人家,爺爺和太爺爺都很出名。馮鞏的太爺爺是馮國璋,是影響一個時代的偉人,在民國時期擔任民國時期總參謀長,地位很高,但這不是馮國璋最大的官職。
  • 【紫牛頭條】這堂課為啥這麼催淚?看著自己的孩子,爸爸媽媽笑著...
    原創 紫牛頭條 揚子晚報揚子晚報·紫牛新聞未經授權不得轉載轉載拒絕任何形式刪改否則保留追究法律責任的權利這幾日,一段小學生在教室表演手舞看哭父母的小視頻,在網絡熱傳。
  • 看到Mybatis源碼就感到煩躁,怎麼辦?
    Mybatis源碼分析今天,我們就來看看Mybatis源碼的閱讀,具體舉個例子來看看:案例和疑問從我們最初的demo中開始:publicstaticvoidmain(String[] args) { String resource = "mybatis-config.xml
  • 政務平臺「諧音梗」為啥這麼火
    「新湘事成」「粵省事」「浙裡辦」……最近,一批政務服務平臺的「大名」火遍全網。這些政務平臺一改嚴肅高冷的作風,變身「為民辦事」的小幫手,從側面折射出政府公共服務能力的提升。政務服務平臺是政府職能轉變的重要實踐,與每位公民息息相關。隨著移動網際網路的發展,政務服務平臺不斷推陳出新,服務範圍愈加廣泛。