天天看點

mybatis 和mybatis-plus 有什麼差別?

mybatis 和mybatis-plus 有什麼差別?

MyBatis 是持久層架構,它支援定制化 SQL、存儲過程以及進階映射。MyBatis 避免了幾乎所有的 JDBC 代碼和手動設定參數以及擷取結果集。MyBatis 可以使用簡單的 XML 或注解來配置和映射原生資訊,将接口和 Java 的 POJOs(Plain Ordinary Java Object,普通的 Java對象)映射成資料庫中的記錄。MyBatis前身是iBatis,是Clinton Begin在2001年發起的一個開源項目。最初側重于碼軟體開發,後續發展成為一款基于java的持久層架構。Mybatis是一款優秀的持久層架構支援自定義SQL查詢、存儲過程和進階映射,消除了幾乎所有的JDBC代碼和參數的手動設定以及結果集的檢索。MyBatis可以使用簡單的XML或者注解進行映射和配置,通過将參數映射到配置的SQL最終解析為執行的SQL語句,查詢後将SQl結果集映射成java對象傳回。MyBatis提供的持久層架構包括SQL Maps(Mapper)和Data Access Objects(DAO),相對于Hibernate而言它提供的是一種把自動化的ORM實作。MyBatis中一級緩存會預設啟用(本地緩存)且不受控制,一般說緩存時指的是MyBatis的二級緩存 。
	MyBatis-plus是一款MyBatis的增強工具,在MyBatis 的基礎上隻做增強不做改變。其是國内團隊苞米豆在MyBatis基礎上開發的增強架構,擴充了一些功能,以提高效率。引入 Mybatis-Plus 不會對現有的 Mybatis 構架産生任何影響,而且 MyBatis-plus 支援所有 Mybatis 原生的特性。主要做了那些改動呢? 首先是将簡單的增删改查變得更加簡化了,咱細細聊聊做了那些增強那些改動。
           
  • 依賴少:僅僅依賴 Mybatis 以及 Mybatis-Spring 。
  • 損耗小:啟動即會自動注入基本 CURD,性能基本無損耗,直接面向對象操作 。
  • 預防Sql注入:内置 Sql 注入剝離器,有效預防Sql注入攻擊 。
  • 通用CRUD操作:内置通用 Mapper、通用 Service,僅僅通過少量配置即可實作單表大部分 CRUD 操作,更有強大的條件構造器,滿足各類使用需求 。
  • 多種主鍵政策:支援多達4種主鍵政策(内含分布式唯一ID生成器),可自由配置,完美解決主鍵問題 。
  • 支援熱加載:Mapper 對應的 XML 支援熱加載,對于簡單的 CRUD 操作,甚至可以無 XML 啟動
  • 支援ActiveRecord:支援 ActiveRecord 形式調用,實體類隻需繼承 Model 類即可實作基本 CRUD 操作
  • 支援代碼生成:采用代碼或者 Maven 插件可快速生成 Mapper 、 Model 、 Service 、 Controller 層代碼(生成自定義檔案,避免開發重複代碼),支援模闆引擎、有超多自定義配置等。
  • 支援自定義全局通用操作:支援全局通用方法注入( Write once, use anywhere )。支援關鍵詞自動轉義:支援資料庫關鍵詞(order、key…)自動轉義,還可自定義關鍵詞 。
  • 内置分頁插件:基于 Mybatis 實體分頁,開發者無需關心具體操作,配置好插件之後,寫分頁等同于普通List查詢。内置性能分析插件:可輸出 Sql 語句以及其執行時間,建議開發測試時啟用該功能,能有效解決慢查詢 。内置全局攔截插件:提供全表 delete 、 update 操作智能分析阻斷,預防誤操作。
  • 預設将實體類的類名查找資料庫中的表,使用@TableName(value=“table1”)注解指定表名,@TableId指定表主鍵,若字段與表中字段名保持一緻可不加注解。

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

舉個比較生動的例子,就是如果Mybatis Plus是扳手,那Mybatis Generator就是生産扳手的工廠,像極了設計模式中的簡單工廠模式。

MyBatis:一種操作資料庫的架構,提供一種Mapper類,支援讓你用java代碼進行增删改查的資料庫操作,省去了每次都要手寫sql語句的麻煩。但是!有一個前提,你得先在xml中寫好sql語句,也是很麻煩的。

MyBatis-Plus的存在就是為了稍稍彌補Mybatis的不足。在我們使用Mybatis時會發現,每當要寫一個業務邏輯的時候都要在DAO層寫一個方法,再對應一個SQL,即使是簡單的條件查詢、即使僅僅改變了一個條件都要在DAO層新增一個方法,針對這個問題, MyBatis-Plus就提供了一個很好的解決方案,它可以讓我們避免許多重複性的工作。