Hibernate與MyBatis區別


Hibernate是當前主流的ORM框架,對數據庫結構提供了較為完整的封裝。

MyBatis同樣也是非常流行的ORM框架,主要在於pojo與SQL之間的映射關系。

區別:

  1、兩者最大的區別

    針對簡單邏輯,Hibernate與MyBatis都有相應的代碼生成工具,可以生成簡單基本的DAO層方法。

    針對高級查詢,MyBatis需要手動編寫SQL語句,以及ResultMap,而Hibernate有良好的映射機制,開發者無需關心SQL的生成與結果映射,可以更專注於流程。

  2、開發難度對比

    Hibernate的開發難度大於MyBatis,主要由於Hibernate比較復雜,龐大,學習周期比較長。

    MyBatis則相對簡單,並且MyBatis主要依賴於生氣了的書寫,讓開發者剛進更熟悉。

  3、sql書寫比較

    MyBatis的sql是手動編寫的,所以可以按照要求指定查詢的字段,不過沒有自己的日志統計,所以要借助Log4j來記錄日志。

    Hibernate也可以自己寫sql來指定需要查詢的字段,但這樣就破壞了Hibernate開發的簡潔性,不過Hibernate具有自己的日志統計。

  4、數據庫擴展性計較

    MyBatis由於所有sql都是依賴數據庫書寫的,所以擴展性、遷移性比較差。

    Hibernate與數據庫具體的關聯在XML中,所以HQL對具體是用什么數據庫並不是很關心

  5、緩存機制比較

    相同點:Hibernate和MyBatis的二級緩存除了采用系統默認的緩存機制外,都可以通過實現你自己的緩存成為其它第三方緩存方案,創建適配器來覆蓋緩存行為。

    不同點:Hibernate的二級緩存配置在SessionFactory生成配置文件中進行詳細配置,然后再在具體的表對象映射中配置那種緩存。

    MyBatis的二級緩存配置都是在每個具體的表對象映射中進行詳細配置,這樣針對不同的表可以自定義不同的緩沖機制,並且MyBatis可以在命名空間中共享相同的緩存配置和實例,通過Cache-ref來實現。

    兩者比較,因為Hibernate對查詢對象有着良好的管理機制,用戶無需關心SQL,所以在使用二級緩存時如果出現臟數據,系統會報出錯誤提示。

    而MyBatis在這一方面使用二級緩存時需要特別小心,如果不能完全去頂數據更新操作的波及范圍,避免cache的盲目使用,否則,臟數據的出現會給系統的正常運行帶來很大的隱患。

  6、總結

    Hibernate與MyBatis都可以通過SessionFactoryBuider由XML配置文件生成SessionFactory,然后由SessionFactory生成Session,最后由Session來開啟執行事務和SQL語句。

    而MyBatis的優勢是MyBatis可以進行更為細致的SQL優化,可以減少查詢字段,並且容易掌握。

    Hibernate的優勢是Dao層開發比MyBatis簡單,MyBatis需要維護sql和結果映射,數據庫移植性,MyBatis的數據庫移植性不好,不同的數據庫需要寫不同SQL,有更好的二級緩存機制,可以使用第三方緩存,MyBatis本身提供的緩存機制不佳。

   


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM