簡介
MyBatis-Plus (簡稱 MP)是一個 MyBatis 的增強(qiáng)工具,在 MyBatis 的基礎(chǔ)上只做增強(qiáng)不 做改變,為簡化開發(fā)、提高效率而生
MyBatis 最好的搭檔,就像 魂斗羅 中的 1P、2P,基友搭配,效率翻倍。

小編整理出來一份MP134頁的詳情介紹pdf文檔,點(diǎn)贊+關(guān)注私信小編“資料”免費(fèi)獲取;下面給大家展示部分內(nèi)容。
看圖 ↓

特性、優(yōu)點(diǎn)
- 無侵入:只做增強(qiáng)不做改變,引入它不會對現(xiàn)有工程產(chǎn)生影響,如絲般順滑
- 損耗小:啟動即會自動注入基本 CURD,性能基本無損耗,直接面向?qū)ο蟛僮?/li>
- 強(qiáng)大的 CRUD 操作:內(nèi)置通用 MApper、通用 Service,僅僅通過少量配置即可實(shí)現(xiàn)單表大部 分 CRUD 操作,更有強(qiáng)大的條件構(gòu)造器,滿足各類使用需求
- 支持 Lambda 形式調(diào)用:通過 Lambda 表達(dá)式,方便的編寫各類查詢條件,無需再擔(dān)心字段寫錯
- 支持主鍵自動生成:支持多達(dá) 4 種主鍵策略(內(nèi)含分布式唯一 ID 生成器 - Sequence),可 自由配置,完美解決主鍵問題
- 支持 ActiveRecord 模式:支持 ActiveRecord 形式調(diào)用,實(shí)體類只需繼承 Model 類即 可進(jìn)行強(qiáng)大的 CRUD 操作
- 支持自定義全局通用操作:支持全局通用方法注入( Write once, use anywhere )
- 內(nèi)置代碼生成器:采用代碼或者 Maven 插件可快速生成 Mapper 、 Model 、 Service 、 Controller 層代碼,支持模板引擎,更有超多自定義配置等您來使用
- 內(nèi)置分頁插件:基于 MyBatis 物理分頁,開發(fā)者無需關(guān)心具體操作,配置好插件之后,寫分頁 等同于普通 List 查詢
- 分頁插件支持多種數(shù)據(jù)庫:支持 MySQL、MariaDB、Oracle、DB2、H2、HSQL、SQLite、 Postgre、SQLServer 等多種數(shù)據(jù)庫
- 內(nèi)置性能分析插件:可輸出 Sql 語句以及其執(zhí)行時間,建議開發(fā)測試時啟用該功能,能快速揪 出慢查詢
- 內(nèi)置全局?jǐn)r截插件:提供全表 delete 、 update 操作智能分析阻斷,也可自定義攔截規(guī)則, 預(yù)防誤操作
核心功能
一、代碼生成器
AutoGenerator 是 MyBatis-Plus 的代碼生成器,通過 AutoGenerator 可以快速生成 Entity、Mapper、Mapper XML、Service、Controller 等各個模塊的代碼,極大的提升了開發(fā) 效率。
演示效果圖:

二、強(qiáng)大的CRUD接口
Mapper CRUD 接口
- 通用 CRUD 封裝BaseMapper 接口,為 Mybatis-Plus 啟動時自動解析實(shí)體表關(guān)系映射轉(zhuǎn) 換為 Mybatis 內(nèi)部對象注入容器
- 泛型 T 為任意實(shí)體對象
- 參數(shù) Serializable 為任意類型主鍵 Mybatis-Plus 不推薦使用復(fù)合主鍵約定每一張表都 有自己的唯一 id 主鍵
- 對象 Wrapper 為 條件構(gòu)造器

Service CRUD 接口
- 通用 Service CRUD 封裝IService 接口,進(jìn)一步封裝 CRUD 采用 get 查詢單行 remove 刪除 list 查詢集合 page 分頁 前綴命名方式區(qū)分 Mapper 層避免混淆
- 泛型 T 為任意實(shí)體對象
- 建議如果存在自定義通用 Service 方法的可能,請創(chuàng)建自己的 IBaseService 繼承 Mybatis-Plus 提供的基類
- 對象 Wrapper 為 條件構(gòu)造器


條件構(gòu)造器
- 以下出現(xiàn)的第一個入?yún)?boolean condition 表示該條件是否加入最后生成的sql中
- 以下代碼塊內(nèi)的多個方法均為從上往下補(bǔ)全個別 boolean 類型的入?yún)?默認(rèn)為 true
- 以下出現(xiàn)的泛型 Param 均為 Wrapper 的子類實(shí)例(均具有 AbstractWrapper 的所有方法)
- 以下方法在入?yún)⒅谐霈F(xiàn)的 R 為泛型,在普通wrapper中是 String ,在LambdaWrapper中是函 數(shù)(例: Entity::getId , Entity 為實(shí)體類, getId 為字段 id 的getMethod)
- 以下方法入?yún)⒅械?R column 均表示數(shù)據(jù)庫字段,當(dāng) R 具體類型為 String 時則為數(shù)據(jù)庫字段 名(字段名是數(shù)據(jù)庫關(guān)鍵字的自己用轉(zhuǎn)義符包裹!)!而不是實(shí)體類數(shù)據(jù)字段名!!!,另當(dāng) R 具體類 型為 SFunction 該項(xiàng)目runtime不支持eclipse自家的編譯器!!!
- 以下舉例均為使用普通wrapper,入?yún)?Map 和 List 的均以 json 形式表現(xiàn)!
- 使用中如果入?yún)⒌?Map 或者 List 為空,則不會加入最后生成的sql中!!!
- 警告: 不支持以及不贊成在 RPC 調(diào)用中把 Wrapper 進(jìn)行傳輸
- wrapper 很重
- 傳輸 wrapper 可以類比為你的 controller 用 map 接收值(開發(fā)一時爽,維護(hù)火葬場)
- 正確的 RPC 調(diào)用姿勢是寫一個 DTO 進(jìn)行傳輸,被調(diào)用方再根據(jù) DTO 執(zhí)行相應(yīng)的操作
- 我們拒絕接受任何關(guān)于 RPC 傳輸 Wrapper 報錯相關(guān)的 issue 甚至 pr
AbstractWrapper
QueryWrapper(LambdaQueryWrapper) 和UpdateWrapper(LambdaUpdateWrapper) 的父類 用于生成 sql 的 where 條件, entity 屬性也用于生成 sql 的 where 條件注意: entity 生 成的 where 條件與 使用各個 api 生成的 where 條件沒有任何關(guān)聯(lián)行為