MyBatis與JPA的區別是什麼

MyBatis分爲全註解版和xml版;全註解版適合於小項目,直接在方法上加註解,在註解中寫sqlmysql


倉儲
Repository 模式是領域驅動設計中另外一個經典的模式。在早期,咱們經常將數據訪問層命名爲:DAO,而在 SpringData JPA 中,其稱之爲 Repository(倉儲),這也不是巧合,而是設計者有意爲之。
熟悉 SpringData JPA 的朋友都知道當一個接口繼承 JpaRepository 接口以後便自動具有了 一系列經常使用的數據操做方法,findAll, findOne ,save等。
那麼倉儲和DAO到底有什麼區別呢?這就要提到一些遺留問題,以及一些軟件設計方面的因素。在此次SpringForAll 的議題中我可以預想到有不少會強調 SpringData JPA 具備方即可擴展的 API,像下面這樣
public interface OrderRepository extends JpaRepository<Order, String>{

    findByOrderNoAndXxxx(String orderNo,Xxx xx);

    @Transactional
    @Modifying(clearAutomatically = true)
    @Query("update t_order set order_status =?1 where id=?2")
    int updateOrderStatusById(String orderStatus, String id);
}

但我要強調的是,這是 SpringData JPA 的妥協,其支持這一特性,並不表明其建議使用。由於這並不符合領域驅動設計的理念。注意對比,SpringData JPA 的設計理念是將 Repository 做爲數據倉庫,而不是一系列數據庫腳本的集合,findByOrderNoAndXxxx 方法能夠由下面一節要提到的JpaSpecificationExecutor代替,而 updateOrderStatusById 方法則能夠由 findOne + save 代替,不要以爲這變得複雜了,試想一下真正的業務場景,修改操做通常不會只涉及一個字段的修改, findOne + save 能夠幫助你完成更加複雜業務操做,而沒必要關心咱們該如何編寫 SQL 語句,真正作到了面向領域開發,而不是面向數據庫 SQL 開發,面向對象的擁躉者也必然會以爲,這更加的 OO。

程序員

 

Mybatis優點

  • MyBatis能夠進行更爲細緻的SQL優化,能夠減小查詢字段。
  • MyBatis容易掌握,而Hibernate門檻較高。

Hibernate優點

  • Hibernate的DAO層開發比MyBatis簡單,Mybatis須要維護SQL和結果映射。
  • Hibernate對對象的維護和緩存要比MyBatis好,對增刪改查的對象的維護要方便。
  • Hibernate數據庫移植性很好,MyBatis的數據庫移植性很差,不一樣的數據庫須要寫不一樣SQL。
  • Hibernate有更好的二級緩存機制,可使用第三方緩存。MyBatis自己提供的緩存機制不佳

 

 

1. hibernate是全自動,而mybatis是半自動

hibernate徹底能夠經過對象關係模型實現對數據庫的操做,擁有完整的JavaBean對象與數據庫的映射結構來自動生成sql。而mybatis僅有基本的字段映射,對象數據以及對象實際關係仍然須要經過手寫sql來實現和管理。

2. hibernate數據庫移植性遠大於mybatis

hibernate經過它強大的映射結構和hql語言,大大下降了對象與數據庫(oracle、mysql等)的耦合性,而mybatis因爲須要手寫sql,所以與數據庫的耦合性直接取決於程序員寫sql的方法,若是sql不具通用性而用了不少某數據庫特性的sql語句的話,移植性也會隨之下降不少,成本很高。

3. hibernate擁有完整的日誌系統,mybatis則欠缺一些

hibernate日誌系統很是健全,涉及普遍,包括:sql記錄、關係異常、優化警告、緩存提示、髒數據警告等;而mybatis則除了基本記錄功能外,功能薄弱不少。

4. mybatis相比hibernate須要關心不少細節

hibernate配置要比mybatis複雜的多,學習成本也比mybatis高。但也正由於mybatis使用簡單,才致使它要比hibernate關心不少技術細節。mybatis因爲不用考慮不少細節,開發模式上與傳統jdbc區別很小,所以很容易上手並開發項目,但忽略細節會致使項目前期bug較多,於是開發出相對穩定的軟件很慢,而開發出軟件卻很快。hibernate則正好與之相反。可是若是使用hibernate很熟練的話,實際上開發效率絲絕不差於甚至超越mybatis。

5. sql直接優化上,mybatis要比hibernate方便不少

因爲mybatis的sql都是寫在xml裏,所以優化sql比hibernate方便不少。而hibernate的sql不少都是自動生成的,沒法直接維護sql;雖有hql,但功能仍是不及sql強大,見到報表等變態需求時,hql也歇菜,也就是說hql是有侷限的;hibernate雖然也支持原生sql,但開發模式上卻與orm不一樣,須要轉換思惟,所以使用上不是很是方便。總之寫sql的靈活度上hibernate不及mybatis。

原文:https://blog.csdn.net/w_q_q_/article/details/79032062

sql

相關文章
相關標籤/搜索