天天看點

mybatis-plus思維導圖,讓mybatis-plus不再難懂

mybatis-plus與mybatis

​​Mybatis​​ 是一款優秀的持久層架構,它支援定制化 SQL、存儲過程以及進階映射。MyBatis 避免了幾乎所有的 JDBC 代碼和手動設定參數以及擷取結果集。MyBatis 可以使用簡單的 XML 或注解來配置和映射原生資訊,将接口和 Java 的 POJOs(Plain Old Java Objects,普通的 Java對象)映射成資料庫中的記錄。

回顧mybatis的特點.png

但mybatis有個讓我比較頭疼的一個問題是sql工作量很大,尤其是字段多的時候。雖然說單表的增删改查操作可以通過mybatis generator工具來生成(或者自己寫模闆工具生成),但項目開發的過程中總免不了要新添加新字段,這些工具就幫不了我了,我得把新字段寫到原來的所有增删改查的sql中。這是個痛苦的過程,特别是當你重複了很多次之後。

mybatis的單表操作也是賊麻煩的事,因為篩選的條件可能會各種各樣,是以你不得不寫很多動态sql來相容查詢條件,這也讓我不能集中精力去處理業務。

每當這時候,我懷念Hibernate了。嘿嘿,Hibernate加字段就賊簡單,單表操作也是賊友善。但我依然不喜歡用Hibernate,哈哈。

而mybatis-plus這樣一個架構,一種集mybatis與hibernate的優點一起的架構。它提供了hibernate的單表CRUD操作的友善同時,又保留了mybatis的特性。

先來看看官方怎麼解釋mybatis-plus的:

​​Mybatis-Plus​​(簡稱MP)是一個Mybatis的增強工具,在 Mybatis 的基礎上隻做增強不做改變,為簡化開發、提高效率而生。

mybatis-plus思維導圖,讓mybatis-plus不再難懂

Mybatis-Plus與Mybatis.png

我們的願景是成為​<code>​Mybatis​</code>​最好的搭檔,就像 ​​Contra Game​​ 中的1P、2P,基友搭配,效率翻倍。

mybatis-plus思維導圖,讓mybatis-plus不再難懂

Contra Game的1P、2P.png

帶問題去學習,請思考

mybatis-plus怎麼實作單表URUD操作?

mybatis-plus的底層實作原理是什麼?

mybatis-plus與其他同類架構如mybatis helper有很什麼優勢?

如何內建mybatis-plus快速搭建一個spring boot項目。

特性
mybatis-plus思維導圖,讓mybatis-plus不再難懂

image.png

從上圖可以看出,mybatis-plus不僅僅封裝了基本的CRUD操作,還内置了防SQL注入操作、常用的分頁插件,還有我最喜歡的ActiveRecord模式。

用過jfinal的人應該都知道ActiveRecord是啥。Active Record 是一種資料通路設計模式,它可以幫助你實作資料對象Object到關系資料庫的映射。

常用實體注解

MP通過ORM模式封裝了常用的CRUD操作,自然少不了實體注解,先來看看都有哪些注解

mybatis-plus思維導圖,讓mybatis-plus不再難懂

MP常用實體注解.png

其中實體無注解化設定可以如下處理:

當資料庫的表字段名是駝峰命名時無需注解處理。

或者全局配置: 下劃線命名 dbColumnUnderline 設定 true , 大寫 isCapitalMode 設定 true

但其實我壓根就沒管過手寫過這些注解,使用mp代碼生成器自動生成主體後直接覆寫原來的就行了,減少人工的失誤,友善快捷。至于@Version與@KeySequence這兩個注解,貌似我還真沒用過。嘿嘿。。。

簡化 CRUD

前面已經說了mp已經簡化了mybatis的單表基本操作,先來看看。

mybatis-plus思維導圖,讓mybatis-plus不再難懂

MP增删改查.png

相比兩種寫法,我更喜歡ActiveRecord的模式寫法,因為我不用注入userMapper,new了一個對象之後直接調用方法操作就行了。

複雜的查詢也很簡單,建立一個EntityWrapper作為查詢對象,Wrapper接口封裝了很多常用的方法。幾乎sql能寫出來的條件調用Wrapper的方法就能表現出來。

mybatis-plus思維導圖,讓mybatis-plus不再難懂

篩選條件Wrapper的方法.png

架構原理

參考答案略。

不過我建議你去mp官網或者這裡看看,哈哈 -&gt; ​​mybatis-plus 實踐及架構原理.pdf​​

mybatis plus代碼生成器 與 mybatis generator

說起mybatis plus代碼生成器的代碼,我記得以前這這篇文章中介紹過

​​開源項目spring-shiro-training思維導圖,讓項目不再難懂​​

現在再拿來用下哈。原理其實很簡單,定義好velocity模闆(當然你也可以自定義),然後傳參數渲染模闆生成對應的檔案。

我建議你生成的位置最好不要直接覆寫原來的檔案,你可能已經有過修改,直接覆寫的話會導緻丢失。

mybatis-plus思維導圖,讓mybatis-plus不再難懂

mp代碼生成器原理.png

而mybatis generator生成的代碼就是基本的增删改查和實體。模闆好像改不了,靈活性明顯不夠。

mp插件拓展

mp不僅僅幫我們實作了基本的增删改查操作,同時還擴充了很多實用的插件。讓開發的過程更加簡單。

mybatis-plus思維導圖,讓mybatis-plus不再難懂

插件拓展.png

按如下步驟:

自定義查詢語句分頁(自己寫sql/mapper)

spring 注入 mybatis 配置分頁插件

​<code>​ ​</code>​

​<code>​}​</code>​

UserMapper.java 方法内容

UserServiceImpl.java 調用翻頁方法,需要 page.setRecords 回傳給頁面

UserMapper.xml 等同于編寫一個普通 list 查詢,mybatis-plus 自動替你分頁

邏輯删除的效果 ---&gt; 會在mp自帶查詢和更新方法的sql後面,追加『邏輯删除字段』=『LogicNotDeleteValue預設值』 删除方法: deleteById()和其他delete方法, 底層SQL調用的是update tbl_xxx set 『邏輯删除字段』=『logicDeleteValue預設值』

配置如下:

修改 內建 全局注入器為 LogicSqlInjector

application.yml全局注入值:

logicDeleteValue // 邏輯删除全局值

logicNotDeleteValue // 邏輯未删除全局值

邏輯删除的字段需要注解 @TableLogic

繼續閱讀