認識MyBatis與Mybatis-plus及兩者的區別

一、認識Mybatis

在這裏插入圖片描述
       MyBatis 是持久層框架,它支持定製化 SQL、存儲過程以及高級映射。MyBatis 避免了幾乎所有的 JDBC 代碼和手動設置參數以及獲取結果集。MyBatis 可以使用簡單的 XML 或註解來配置和映射原生信息,將接口和 Java 的 POJOs(Plain Ordinary Java Object,普通的 Java對象)映射成數據庫中的記錄。

1、功能架構
Mybatis的功能架構分爲三層:
(1)API接口層:提供給外部使用的接口API,開發人員通過這些本地API來操縱數據庫。接口層一接收到調用請求就會調用數據處理層來完成具體的數據處理。
(2)數據處理層:負責具體的SQL查找、SQL解析、SQL執行和執行結果映射處理等。它主要的目的是根據調用的請求完成一次數據庫操作。
(3)基礎支撐層:負責最基礎的功能支撐,包括連接管理、事務管理、配置加載和緩存處理,這些都是共用的東西,將他們抽取出來作爲最基礎的組件。爲上層的數據處理層提供最基礎的支撐。

2、框架架構
框架架構講解:
(1)加載配置:配置來源於兩個地方,一處是配置文件,一處是Java代碼的註解,將SQL的配置信息加載成爲一個個MappedStatement對象(包括了傳入參數映射配置、執行的SQL語句、結果映射配置),存儲在內存中。
(2)SQL解析:當API接口層接收到調用請求時,會接收到傳入SQL的ID和傳入對象(可以是Map、JavaBean或者基本數據類型),Mybatis會根據SQL的ID找到對應的MappedStatement,然後根據傳入參數對象對MappedStatement進行解析,解析後可以得到最終要執行的SQL語句和參數。
(3)SQL執行:將最終得到的SQL和參數拿到數據庫進行執行,得到操作數據庫的結果。
(4)結果映射:將操作數據庫的結果按照映射的配置進行轉換,可以轉換成HashMap、JavaBean或者基本數據類型,並將最終結果返回。

3、MyBatis的優缺點
優點:

  • 簡單易學:本身就很小且簡單。沒有任何第三方依賴,最簡單安裝只要兩個jar文件+配置幾個sql映射文件易於學習,易於使用,通過文檔和源代碼,可以比較完全的掌握它的設計思路和實現.
  • 靈活:mybatis不會對應用程序或者數據庫的現有設計強加任何影響。 sql寫在xml裏,便於統一管理和優化。通過sql基本上可以實現我們不使用數據訪問框架可以實現的所有功能,或許更多.
  • 解除sql與程序代碼的耦合:通過提供DAL層,將業務邏輯和數據訪問邏輯分離,使系統的設計更清晰,更易維護,更易單元測試。sql和代碼的分離,提高了可維護性.
  • 提供映射標籤,支持對象與數據庫的orm字段關係映射.
  • 提供對象關係映射標籤,支持對象關係組建維護.
  • 提供xml標籤,支持編寫動態sql.
    缺點:
  • 編寫SQL語句時工作量很大,尤其是字段多、關聯表多時,更是如此.
  • SQL語句依賴於數據庫,導致數據庫移植性差,不能更換數據庫.
  • 框架還是比較簡陋,功能尚有缺失,雖然簡化了數據綁定代碼,但是整個底層數據庫查詢實際還是要自己寫的,工作量也比較大,而且不太容易適應快速數據庫修改.
  • 二級緩存機制不佳.

二、認識Mybatis-plus

在這裏插入圖片描述
       Mybatis-Plus(MP)在 MyBatis 的基礎上只做增強不做改變,簡化開發、提高效率。但它也提供了一些很有意思的插件,比如SQL性能監控、樂觀鎖、執行分析等。

  1. 代碼生成器
  2. 通用的CURD
  3. 條件構造器
  4. 自定義SQL語句
  5. 分頁插件、性能分析插件
  6. 公共字段自動填充

優點

  • 無侵入:Mybatis-Plus 在 Mybatis 的基礎上進行擴展,只做增強不做改變,MyBatis-Plus支持所有Mybatis原生的特性,因此引入 Mybatis-Plus 不會對現有的 Mybatis 構架產生任何影響,而且 MP 支持所有 Mybatis 原生的特性
  • 依賴少:僅僅依賴 Mybatis 以及 Mybatis-Spring
  • 損耗小:啓動即會自動注入基本CURD,性能基本無損耗,直接面向對象操作
  • 通用CRUD操作:內置通用 Mapper、通用 Service,僅僅通過少量配置即可實現單表大部分 CRUD 操作,更有強大的條件構造器,滿足各類使用需求
  • 多種主鍵策略:支持多達4種主鍵策略(內含分佈式唯一ID生成器),可自由配置,完美解決主鍵問題
  • 支持ActiveRecord:支持 ActiveRecord 形式調用,實體類只需繼承 Model 類即可實現基本 CRUD 操作
  • 支持代碼生成:採用代碼或者 Maven 插件可快速生成 Mapper 、 Model 、 Service 、 Controller 層代碼,支持模板引擎,更有超多自定義配置等您來使用(P.S. 比 Mybatis 官方的 Generator 更加強大!)
  • 支持自定義全局通用操作:支持全局通用方法注入( Write once, use anywhere )
  • 內置分頁插件:基於Mybatis物理分頁,開發者無需關心具體操作,配置好插件之後,寫分頁等同於寫基本List查詢
  • 內置性能分析插件:可輸出Sql語句以及其執行時間,建議開發測試時啓用該功能,能有效解決慢查詢
  • 內置全局攔截插件:提供全表 delete 、update 操作智能分析阻斷,預防誤操作

三、MyBatis與Mybatis-plus的區別

       如果Mybatis Plus是扳手,那Mybatis Generator就是生產扳手的工廠。
       MyBatis:一種操作數據庫的框架,提供一種Mapper類,支持讓你用java代碼進行增刪改查的數據庫操作,省去了每次都要手寫sql語句的麻煩。但是!有一個前提,你得先在xml中寫好sql語句,也是很麻煩的。
       MP的存在就是爲了稍稍彌補Mybatis的不足。在我們使用Mybatis時會發現,每當要寫一個業務邏輯的時候都要在DAO層寫一個方法,再對應一個SQL,即使是簡單的條件查詢、即使僅僅改變了一個條件都要在DAO層新增一個方法,針對這個問題,MP就提供了一個很好的解決方案,它可以讓我們避免許多重複性的工作。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章