太火了!MyBatis Plus 为啥这么牛?
來源: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,代碼如下:
@Configuration public?class?MybatisPlusConfig?{/***?分頁插件**?@return?PaginationInterceptor*/@Beanpublic?PaginationInterceptor?paginationInterceptor()?{return?new?PaginationInterceptor();}@Beanpublic?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?天開易想*/ @Mapper public?interface?TestMapper?extends?EasyBaseMapper<Test>?{ }/***?業務實現類接口,即可引用**?@author?天開易想*/ @Service public?class?TestServiceImpl?extends?ServiceImpl<TestMapper,?Test>?implements?TestService?{@Overridepublic?Integer?testBatch(Collection<Test>?testList)?{return?baseMapper.insertBatchSomeColumn(testList);}因為在BaseMapper中是不能拿來直接引用的,為什么不能直接引用,所謂的只是支持 MySql 數據庫,所以作者沒有內置的原因吧!
到這里,我們的批量插入功能就大功告成!
推薦文章今天給大家推薦6個Spring Boot項目,拿來就可以賺錢! 分享一套基于SpringBoot和Vue的企業級中后臺開源項目,這個項目有點哇塞! 圈子哥推薦一種基于Spring Boot開發OA開源產品,學習/搞外快都是不二選擇! 硬剛一周,3W字總結,一年的經驗告訴你如何準備校招! 原創電子書歷時整整一年總結的?Java面試+ Java入門技術學習指南,這是本人這幾年及校招的總結,各種異步面試題已經全部進行總結,按照章節復習即可,已經拿到了了大廠提供。原創思維導圖掃碼或者微信搜?程序員的技術圈子?回復?面試?領取原創電子書和思維導圖。總結
以上是生活随笔為你收集整理的太火了!MyBatis Plus 为啥这么牛?的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 为什么牛逼的程序员都不用 “ ! = n
- 下一篇: 10 个冷门但又非常实用的 Docker