答:MyBatisPlus可以為我們節省大量的工作時間,它可以自動完成所有的CRUD代碼!
優勢:
1.易於使用和掌握。
2.sql是用xml編寫的,用於統壹管理和優化。
3.從程序代碼中分離sql。
4.提供映射標簽,支持對象和數據庫之間orm字段關系的映射。
5.提供對象關系映射標簽,支持對象關系的建立和維護。
6.提供xml標記來支持編寫動態sql。
MyBatis Plus(簡稱MP)是MyBatis的增強工具,它基於MyBatis,只增強不改動,為簡化開發,提高效率而生。
就像1P,魂鬥羅裏的2P,有了基友,效率翻倍。
特點:
無創:只加強不改變,引入不影響現有項目,如絲般順滑。
低損耗:啟動時會自動註入基本的CURD,性能幾乎沒有損失,強大的CRUD操作可以直接面向對象操作:內置的universal Mapper和universal Service只需要少量配置就可以實現單個表的大部分CRUD操作,還有強大的condition constructor,可以滿足各種使用需求,支持Lambda表單調用:通過Lambda表達式可以方便地編寫各種查詢條件,不用擔心字段拼寫錯誤。
支持組件自動生成:最多支持四種主鍵策略(包括分布式唯壹ID生成器序列),可自由配置,完美解決主鍵問題。
支持ActiveRecord模式:支持ActiveRecord表單調用,實體類只有繼承模型類才能執行強大的CRUD操作。
支持自定義全局通用操作:支持全局通用方法註入(壹次編寫,隨處使用)。
內置代碼生成器:使用代碼或Maven插件可以快速生成Mapper、Model、Service和Controller層代碼,支持模板引擎,還有很多定制配置供妳使用內置分頁插件:基於MyBatis物理分頁,開發者無需關心具體操作。配置好插件後,寫分頁就相當於普通的列表查詢。
分頁插件支持各種數據庫:MySQL、MariaDB、Oracle、DB2、H2、HSQL、SQLite、Postgre、SQLServer等數據庫。
內置性能分析插件:可以輸出Sql語句及其執行時間。建議在開發測試時啟用該功能,可以快速找出速度慢的查詢。
內置全局攔截插件:提供對全表刪除更新操作的智能分析和攔截,還可以自定義攔截規則,防止誤操作。
1.1,介紹mybatis-plus的相關maven依賴。
mybatis-plus在春季開機場景啟動器中的介紹
Ps:記住mybatis和mybatis-spring的maven依賴不能再引入pom.xml文件,這壹點在mybatis-plus的官方文檔中已經說的很清楚了。
1.2,創建壹個數據表
(1)SQL語句
(2)數據表結構
1.3,創建java bean
根據數據表創建新的相關實體類
1包com.example.demo.pojo
1.4,配置應用程序屬性
數據源使用druid
crud實驗之前,簡單對比壹下mybatis和mybatis-plus。
2.1,mybatis和mybatis-plus之間的比較
(1)問題:假設我們已經有了壹個tbl_Employee表和對應的實體類Employee,我們需要做什麽來實現tbl_employee表的CRUD操作?
(2)實現方式:基於Mybatis,需要編寫EmployeeMapper接口,手工編寫CRUD方法提供的EmployeeMapper.xml的映射文件,手工編寫每個方法對應的SQL語句。基於Mybatis-plus,只需要創建EmployeeMapper接口。並繼承BaseMapper接口。這就是使用mybatis-plus所需要做的全部工作,甚至不需要創建SQL映射文件。
2.2.BaseMapper界面簡介
(1)如何理解核心接口BaseMapper?
使用Mybatis-Plus時,最核心的操作類是BaseMapper接口,它最終是使用Mybatis接口編程的實現機制。默認情況下,它提供了壹系列添加、刪除、修改和查詢的基本方法,開發者不需要為這些基本操作編寫sql(Mybatis提供的機制是開發者需要在mapper.xml中提供SQL語句)。在這種情況下,我們可以猜測Mybatis-Plus壹定已經完成了BaseMapper接口提供的方法的SQL語句生成操作。
(2)BaseMapper接口為我們定義了哪些方法?
BaseMapper接口源代碼:
(3)MyBatis-plus 1中常用的註釋
因為我們的數據表名稱與實體類的類名不壹致,實體類的字段名與數據表不對應,所以需要引入mybatis-plus的註釋。
編寫EmployeeMapper接口,繼承BaseMapper接口。
準備考試環境:
(1)插入
(2)修改
控制臺打印的Sql語句
如果我們不設置實體類的email和gender屬性會怎麽樣?
控制臺sql語句:
顯然,mybatis-plus為我們做了壹個非空的判斷。如果為空,默認情況下不會更新相應的字段。妳想想,這是不是和mybatis裏的動態sql差不多?
這種治療會帶來什麽好處?
(3)詢問
SelectById方法
SelectBatchIds方法
Ps:發現sql的in關鍵字其實是用在這個方法的底層。
SelectByMap方法
⑷刪除
3、不得不提條件構造器——包裝器。
3.1.包裝器及其子類介紹
(1)包裝器:抽象類的條件構造,最頂層的父類,抽象類中提供的三個方法和其他方法。