太火了!MyBatis Plus 為啥這么牛?
關注我們,設為星標,每天7:30不見不散,架構路上與您共享? 回復"架構師"獲取資源
特色 正文 組件依賴 擴展代碼
大家有用過MyBatis-Plus(簡稱MP)的都知道它是一個MyBatis的增強工具,致力于MyBatis的基礎上只做增強不做改變,為簡化開發(fā),提高效率而生。
特色
無侵入:只做增強不做改變,約會它不會對現(xiàn)有工程產(chǎn)生影響,如絲般順滑 損耗?。簡蛹磿詣幼⑷牖綜URD,性能基本無損耗,直接面向?qū)ο蟛僮?/span> 強大的CRUD操作:內(nèi)置通用Mapper,通用服務,僅通過少量配置即可實現(xiàn)單表大部分CRUD操作,足以強大的條件構造器,滿足各種使用需求 支持Lambda形式調(diào)用:通過Lambda表達式,方便的編寫分類查詢條件,無需再擔心替換寫錯 支持主鍵自動生成:支持多達4種主鍵策略(內(nèi)部含分布式唯一ID生成器-序列),可自由配置,完美解決主鍵問題 支持ActiveRecord模式:支持ActiveRecord形式調(diào)用,實體類只需繼承Model類即可進行強大的CRUD操作 支持自定義通用通用操作:支持通用通用方法注入(寫一次,可在任何地方使用) 內(nèi)置代碼生成器:采用代碼或Maven插件可快速生成Mapper,Model,Service,Controller層代碼,支持模板引擎,甚至超多自定義配置等您來使用 內(nèi)置分頁插件:基于MyBatis物理分頁,開發(fā)者無需關心特定操作,配置好插件之后,寫分頁等同于普通列表查詢 分頁插件支持多種數(shù)據(jù)庫:支持MySQL,MariaDB,Oracle,DB2,H2,HSQL,SQLite,Postgre,SQLServer等多種數(shù)據(jù)庫 內(nèi)置性能分析插件:可輸出Sql語句以及其執(zhí)行時間,建議開發(fā)測試時啟用該功能,能快速揪出慢查詢 內(nèi)置的攔截插件:提供全表delete,update操作智能分析中斷,也可自定義攔截規(guī)則,預防誤操作
正文
在實際項目開發(fā)中,我們常常有把數(shù)據(jù)批量保存到數(shù)據(jù)庫的需求,大家還是多或少的用mybatis-plus實現(xiàn)過吧?
組件依賴
首先我們要通過Maven?mybatis-plus開源組件,在pom.xml文件中加入以下代碼:
<dependency>
????<groupId>com.baomidougroupId>
????<artifactId>mybatis-plus-boot-starterartifactId>
????<version>3.4.0version>
dependency>
<dependency>
????<groupId>com.baomidougroupId>
????<artifactId>mybatis-plus-extensionartifactId>
????<version>3.4.0version>
dependency>
通過查看原始碼發(fā)現(xiàn)API接口提供的批量插入的接口:

啟動服務后,用Postman調(diào)試,后臺打印如下:

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

難不成要手工實現(xiàn),這樣,
INSERT?INTO?test?(a,?b,?c)?VALUES
="list"?item="item"?separator=",">
????(#{item.a},?#{item.b},?#{item.c})
我們閱讀mybatis-plus的源碼,在com.baomidou.mybatisplus.extension.injector.methods.InsertBatchSomeColumn包中其實是有很多插入代碼實現(xiàn)的,這里我就不貼標簽了,大家自行跟蹤一下。我們來手工擴展一下:
擴展代碼
說話便宜,給我看看代碼。先展示代碼。再帶大家慢慢解釋為什么這樣實現(xiàn):

在MybatisPlusConfig文件中注入該Bean,代碼如下:
@Configuration
public?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,支持數(shù)據(jù)批量插入
?*
?*?@author?天開易想
?*/
public?interface?EasyBaseMapper<T>?extends?BaseMapper<T>?{
????/**
?????*?批量插入?僅適用于mysql
?????*
?????*?@param?entityList?實體列表
?????*?@return?影響行數(shù)
?????*/
????Integer?insertBatchSomeColumn(Collection?entityList) ;
}
我們即可在業(yè)務類中,實現(xiàn)以下的引用了,代碼如下:
/**
?*?定義業(yè)務mapper接口,繼承剛剛擴展的EasyBaseMapper
?*
?*?@author?天開易想
?*/
@Mapper
public?interface?TestMapper?extends?EasyBaseMapper<Test>?{
}
/**
?*?業(yè)務實現(xiàn)類接口,即可引用
?*
?*?@author?天開易想
?*/
@Service
public?class?TestServiceImpl?extends?ServiceImpl<TestMapper,?Test>?implements?TestService?{
????@Override
????public?Integer?testBatch(Collection?testList) ?{
????????return?baseMapper.insertBatchSomeColumn(testList);
????}
因為在BaseMapper中是不能拿來直接引用的,為什么不能直接引用,所謂的只是支持MySql數(shù)據(jù)庫,所以作者沒有內(nèi)置的原因吧!

到此文章就結束了。如果今天的文章對你在進階架構師的路上有新的啟發(fā)和進步,歡迎轉(zhuǎn)發(fā)給更多人。歡迎加入架構師社區(qū)技術交流群,眾多大咖帶你進階架構師,在后臺回復“加群”即可入群。
這些年小編給你分享過的干貨
《不花錢的IDEA 2020.3 最新激活教程,有效期到2100年!》
《Docker與CI持續(xù)集成/CD持續(xù)部署》

轉(zhuǎn)發(fā)在看就是最大的支持??

