MyBatis 本是apache的一個開源項目iBatis, 2010年這個項目由apache software foundation遷移到了google code,並且改名為MyBatis 。iBATIS一詞來源於“internet”和“abatis”的組合,是一個基於Java的持久層框架。iBATIS提供的持久層框架包括SQL Maps和Data Access Objects(DAO)。
MyBatis 是支持定制化 SQL、存儲過程以及高級映射的優秀的持久層框架。MyBatis 避免了幾乎所有的 JDBC 代碼和手工設置參數以及抽取結果集。MyBatis 使用簡單的 XML 或注解來配置和映射基本體,將接口和 Java 的 POJOs(Plain Old Java Objects,普通的 Java對象)映射成數據庫中的記錄。
MyBatis是iBatis的升級版,用法有很多的相似之處,但是MyBatis進行了重要的改進。例如:
1、Mybatis實現了接口綁定,使用更加方便。
在ibatis2.x中我們需要在DAO的實現類中指定具體對應哪個xml映射文件, 而Mybatis實現了DAO接口與xml映射文件的綁定,自動為我們生成接口的具體實現,使用起來變得更加省事和方便。
2、對象關系映射的改進,效率更高
3、MyBatis采用功能強大的基於OGNL的表達式來消除其他元素。
MyBatis的框架架構
對於IBatis與MyBatis的區別就不再多說了,感興趣的朋友可以研究一下。
原理詳解:
MyBatis應用程序根據XML配置文件創建SqlSessionFactory,SqlSessionFactory在根據配置,配置來源於兩個地方,一處是配置文件,一處是Java代碼的注解,獲取一個SqlSession。SqlSession包含了執行sql所需要的所有方法,可以通過SqlSession實例直接運行映射的sql語句,完成對數據的增刪改查和事務提交等,用完之后關閉SqlSession。
MyBatis的優缺點
優點就不說了,很長時間的框架了。有些項目還在用。
缺點:
1、編寫SQL語句時工作量很大,尤其是字段多、關聯表多時,更是如此。
2、SQL語句依賴於數據庫,導致數據庫移植性差,不能更換數據庫。
3、框架還是比較簡陋,功能尚有缺失,雖然簡化了數據綁定代碼,但是整個底層數據庫查詢實際還是要自己寫的,工作量也比較大,而且不太容易適應快速數據庫修改。
4、二級緩存機制不佳。
Mybatis-Plus
學過mybatis的小伙伴肯定知道早期的mybatis需要寫很多Mapper.xml文件,這種方式導致的缺陷也很明顯。
由於需求導致 Entity需要增減一個字段,那么與此同時需要修改Mapper.xml文件。導致牽一發而動全身(總之麻煩!!)
在新版本mybatis3中雖然脫離了使用Mapper.xml文件,代替的方式是通過注解開發,把Sql語句寫在了注解上。但是這種方式依然需要修改Sql語句(需要尋找注解),依然沒有解決之前遺留的問題。
因此Mybatis-plus誕生了,它的出現就是為了解決這個問題,全過程中不需要寫Sql代碼,這樣減少了開發工作量。
有用過MyBatis-Plus(簡稱MP)的都知道它是一個MyBatis的增強工具,旨在MyBatis的基礎上只做增強不做改變,為簡化開發、提高效率而生.
Mybatis Plus:國人團隊苞米豆在Mybatis的基礎上開發的框架,在Mybatis基礎上擴展了許多功能,榮獲了2018最受歡迎國產開源軟件第5名。
Mybatis Plus Generator:同樣為苞米豆開發,比Mybatis Generator更加強大,支持功能更多,自動生成Entity、Mapper、Service、Controller等。
特點:
- 無侵入:只做增強不做改變,引入它不會對現有工程產生影響,如絲般順滑
- 損耗小:啟動即會自動注入基本 CURD,性能基本無損耗,直接面向對象操作
- 強大的 CRUD 操作:內置通用 Mapper、通用 Service,僅僅通過少量配置即可實現單表大部分 CRUD 操作,更有強大的條件構造器,滿足各類使用需求
- 支持 Lambda 形式調用:通過 Lambda 表達式,方便的編寫各類查詢條件,無需再擔心字段寫錯
- 支持主鍵自動生成:支持多達 4 種主鍵策略(內含分布式唯一 ID 生成器 - Sequence),可自由配置,完美解決主鍵問題
- 支持 ActiveRecord 模式:支持 ActiveRecord 形式調用,實體類只需繼承 Model 類即可進行強大的 CRUD 操作
- 支持自定義全局通用操作:支持全局通用方法注入( Write once, use anywhere )
- 內置代碼生成器:采用代碼或者 Maven 插件可快速生成 Mapper 、 Model 、 Service 、 Controller 層代碼,支持模板引擎,更有超多自定義配置等您來使用
- 內置分頁插件:基於 MyBatis 物理分頁,開發者無需關心具體操作,配置好插件之后,寫分頁等同於普通 List 查詢
- 分頁插件支持多種數據庫:支持 MySQL、MariaDB、Oracle、DB2、H2、HSQL、SQLite、Postgre、SQLServer 等多種數據庫
- 內置性能分析插件:可輸出 Sql 語句以及其執行時間,建議開發測試時啟用該功能,能快速揪出慢查詢
- 內置全局攔截插件:提供全表 delete 、 update 操作智能分析阻斷,也可自定義攔截規則,預防誤操作
組件依賴:
首先我們要通過Maven引入mybatis-plus 開源組件,在pom.xml文件加入下面的代碼:
<!--mybatis-->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.4.0</version>
</dependency>
<!--mybatisplusextension, mybatispluscore-->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-extension</artifactId>
<version>3.4.0</version>
</dependency>
后面的自己百度就不說了,項目中自己集成。
比較
Mybatis-Plus是一個Mybatis的增強工具,它在Mybatis的基礎上做了增強,卻不做改變。我們在使用Mybatis-Plus之后既可以使用Mybatis-Plus的特有功能,又能夠正常使用Mybatis的原生功能。Mybatis-Plus(以下簡稱MP)是為簡化開發、提高開發效率而生,但它也提供了一些很有意思的插件,比如SQL性能監控、樂觀鎖、執行分析等。
Mybatis雖然已經給我們提供了很大的方便,但它還是有不足之處,實際上沒有什么東西是完美的,MP的存在就是為了稍稍彌補Mybatis的不足。在我們使用Mybatis時會發現,每當要寫一個業務邏輯的時候都要在DAO層寫一個方法,再對應一個SQL,即使是簡單的條件查詢、即使僅僅改變了一個條件都要在DAO層新增一個方法,針對這個問題,MP就提供了一個很好的解決方案,之后我會進行介紹。另外,MP的代碼生成器也是一個很有意思的東西,它可以讓我們避免許多重復性的工作。.
總結
Mybatis-Plus簡化了單表操作,不用寫sql,一些復雜的單表sql也可以通過api搞出來,多表聯合查詢、一些復雜的sql,還是需要xml來實現
其實差別不大,只是有些簡單的增刪改查就沒必要去寫mapper.xml了而已,mp的接口已經定義了。還有就是多了一些api構造sql語句而已,核心東西沒變。
看到很多同學都在說可以不用自己寫xml,其實mybatis官方有提供代碼生成器mybatis-generator,而且無侵入性,生成代碼后,還是mybatis代碼,沒有多一層封裝。很多同學用了MP才知道有代碼生成器,其實mybatis官方也有。Mybatis Generator:自動為Mybatis生成簡單的增刪改查sql語句的工具。
MP就仿佛,你開着一輛名叫MyBayis的手動擋汽車,然后請了一個叫MP的人坐在副駕駛幫你掛檔。
當然對於團隊使用,管理嚴格的的項目,還是可以用MP的,應該他確實減少了很多的工作量。
原文鏈接:https://zhuanlan.zhihu.com/p/346009753