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本身提供的緩存機制不佳。
