mybatis-plus與mybatisjava
mybatisgit
Mybatis 是一款優秀的持久層框架,它支持定製化 SQL、存儲過程以及高級映射。MyBatis 避免了幾乎全部的 JDBC 代碼和手動設置參數以及獲取結果集。MyBatis 可使用簡單的 XML 或註解來配置和映射原生信息,將接口和 Java 的 POJOs(Plain Old Java Objects,普通的 Java對象)映射成數據庫中的記錄。github
但mybatis有個讓我比較頭疼的一個問題是sql工做量很大,尤爲是字段多的時候。雖說單表的增刪改查操做能夠經過mybatis generator工具來生成(或者本身寫模板工具生成),但項目開發的過程當中總免不了要新添加新字段,這些工具就幫不了我了,我得把新字段寫到原來的全部增刪改查的sql中。這是個痛苦的過程,特別是當你重複了不少次以後。spring
mybatis的單表操做也是賊麻煩的事,由於篩選的條件可能會各類各樣,因此你不得不寫不少動態sql來兼容查詢條件,這也讓我不能集中精力去處理業務。sql
每當這時候,我懷念Hibernate了。嘿嘿,Hibernate加字段就賊簡單,單表操做也是賊方便。但我依然不喜歡用Hibernate,哈哈。數據庫
mybatis-plus設計模式
而mybatis-plus這樣一個框架,一種集mybatis與hibernate的優勢一塊兒的框架。它提供了hibernate的單表CRUD操做的方便同時,又保留了mybatis的特性。api
先來看看官方怎麼解釋mybatis-plus的:緩存
Mybatis
最好的搭檔,就像 Contra Game 中的1P、2P,基友搭配,效率翻倍。帶問題去學習,請思考springboot
特性
從上圖能夠看出,mybatis-plus不只僅封裝了基本的CRUD操做,還內置了防SQL注入操做、經常使用的分頁插件,還有我最喜歡的ActiveRecord模式。
用過jfinal的人應該都知道ActiveRecord是啥。Active Record 是一種數據訪問設計模式,它能夠幫助你實現數據對象Object到關係數據庫的映射。
經常使用實體註解
MP經過ORM模式封裝了經常使用的CRUD操做,天然少不了實體註解,先來看看都有哪些註解
其中實體無註解化設置能夠以下處理:
但其實我壓根就沒管過手寫過這些註解,使用mp代碼生成器自動生成主體後直接覆蓋原來的就好了,減小人工的失誤,方便快捷。至於@Version與@KeySequence這兩個註解,貌似我還真沒用過。嘿嘿。。。
簡化 CRUD
前面已經說了mp已經簡化了mybatis的單表基本操做,先來看看。
相比兩種寫法,我更喜歡ActiveRecord的模式寫法,由於我不用注入userMapper,new了一個對象以後直接調用方法操做就好了。
複雜的查詢也很簡單,新建一個EntityWrapper做爲查詢對象,Wrapper接口封裝了不少經常使用的方法。幾乎sql能寫出來的條件調用Wrapper的方法就能表現出來。
架構原理
參考答案略。
不過我建議你去mp官網或者這裏看看,哈哈 -> mybatis-plus 實踐及架構原理.pdf
mybatis plus代碼生成器 與 mybatis generator
提及mybatis plus代碼生成器的代碼,我記得之前這這篇文章中介紹過
如今再拿來用下哈。原理其實很簡單,定義好velocity模板(固然你也能夠自定義),而後傳參數渲染模板生成對應的文件。
我建議你生成的位置最好不要直接覆蓋原來的文件,你可能已經有過修改,直接覆蓋的話會致使丟失。
而mybatis generator生成的代碼就是基本的增刪改查和實體。模板好像改不了,靈活性明顯不夠。
mp插件拓展
mp不只僅幫咱們實現了基本的增刪改查操做,同時還擴展了不少實用的插件。讓開發的過程更加簡單。
分頁插件 按以下步驟:
<plugins> <!-- | 分頁插件配置 | 插件提供二種方言選擇:一、默認方言 二、自定義方言實現類,二者均未配置則拋出異常! | overflowCurrent 溢出總頁數,設置第一頁 默認false | optimizeType Count優化方式 ( 版本 2.0.9 改成使用 jsqlparser 不須要配置 ) | --> <!-- 注意!! 若是要支持二級緩存分頁使用類 CachePaginationInterceptor 默認、建議以下!! --> <plugin interceptor="com.baomidou.mybatisplus.plugins.PaginationInterceptor"> <property name="sqlParser" ref="自定義解析類、能夠沒有" /> <property name="localPage" value="默認 false 改成 true 開啓了 pageHeper 支持、能夠沒有" /> <property name="dialectClazz" value="自定義方言類、能夠沒有" /> </plugin> </plugins>
//Spring boot方式 @EnableTransactionManagement @Configuration @MapperScan("com.baomidou.cloud.service.*.mapper*") public class MybatisPlusConfig { /** * 分頁插件 */ @Bean public PaginationInterceptor paginationInterceptor() { return new PaginationInterceptor(); } }
public interface UserMapper{//能夠繼承或者不繼承BaseMapper /** * <p> * 查詢 : 根據state狀態查詢用戶列表,分頁顯示 * </p> * * @param page * 翻頁對象,能夠做爲 xml 參數直接使用,傳遞參數 Page 即自動分頁 * @param state * 狀態 * @return */ List<User> selectUserList(Pagination page, Integer state); }
public Page<User> selectUserPage(Page<User> page, Integer state) { return page.setRecords(userMapper.selectUserList(page, state)); }
<select id="selectUserList" resultType="User"> SELECT * FROM user WHERE state=#{state} </select>
邏輯刪除插件
邏輯刪除的效果 ---> 會在mp自帶查詢和更新方法的sql後面,追加『邏輯刪除字段』=『LogicNotDeleteValue默認值』 刪除方法: deleteById()和其餘delete方法, 底層SQL調用的是update tbl_xxx set 『邏輯刪除字段』=『logicDeleteValue默認值』
配置以下:
@Bean public GlobalConfiguration globalConfiguration() { GlobalConfiguration conf = new GlobalConfiguration(new LogicSqlInjector()); conf.setLogicDeleteValue("-1"); conf.setLogicNotDeleteValue("1"); conf.setIdType(2); return conf; }
mybatis-plus: mapper-locations: classpath:/mapper/*Mapper.xml #實體掃描,多個package用逗號或者分號分隔 typeAliasesPackage: com.baomidou.springboot.entity typeEnumsPackage: com.baomidou.springboot.entity.enums global-config: #主鍵類型 0:"數據庫ID自增", 1:"用戶輸入ID",2:"全局惟一ID (數字類型惟一ID)", 3:"全局惟一ID UUID"; id-type: 2 #字段策略 0:"忽略判斷",1:"非 NULL 判斷"),2:"非空判斷" field-strategy: 2 db-column-underline: true #邏輯刪除配置 logic-delete-value: 0 logic-not-delete-value: 1 sql-injector: com.baomidou.mybatisplus.mapper.LogicSqlInjector
@TableName("tbl_user") public class UserLogicDelete { private Long id; ... @TableField(value = "delete_flag") @TableLogic private Integer deleteFlag; }
spring整合mybatis-plus的優秀案例
基本集成案例 mybatisplus-spring-boot
Java EE(J2EE)快速開發框架 SpringWind
SSM 後臺框架 KangarooAdmin
JAVA分佈式快速開發基礎平臺 iBase4J
又一個 SSM 後臺管理框架 framework
貓寧Morning公益商城 Morning
簡單實用的權限系統 spring-shiro-training Shiro 案例
最後
歡迎關注java思惟導圖公衆號,回覆「思惟導圖」可下載文章中的源導圖文件。思惟導圖學java,讓java再也不難懂。