Hibernate與 MyBatis的比較

Hibernate 是當前最流行的O/R mapping框架,它出身於sf.NET,現在已經成爲Jboss的一部分。 Mybatis 是另外一種優秀的O/R mapping框架。目前屬於apache的一個子項目。

MyBatis 參考資料官網:http://www.mybatis.org/core/zh/index.html
Hibernate參考資料: http://docs.jboss.org/hibernate/core/3.6/reference/zh-CN/html_single/

1.1 Hibernate 簡介
Hibernate對數據庫結構提供了較爲完整的封裝,Hibernate的O/R Mapping實現了POJO 和數據庫表之間的映射,以及SQL 的自動生成和執行。程序員往往只需定義好了POJO 到數據庫表的映射關係,即可通過Hibernate 提供的方法完成持久層操作。程序員甚至不需要對SQL 的熟練掌握, Hibernate/OJB 會根據制定的存儲邏輯,自動生成對應的SQL 並調用JDBC 接口加以執行。
1.2 MyBatis簡介
iBATIS 的着力點,則在於POJO 與SQL之間的映射關係。然後通過映射配置文件,將SQL所需的參數,以及返回的結果字段映射到指定POJO。 相對Hibernate“O/R”而言,iBATIS 是一種“Sql Mapping”的ORM實現。

2.1 hibernate緩存機制

1.Hibernate一級緩存又稱爲“Session的緩存”。
Session內置不能被卸載,Session的緩存是事務範圍的緩存(Session對象的生命週期通常對應一個數據庫事務或者一個應用事務)。
一級緩存中,持久化類的每個實例都具有唯一的OID。
一級緩存的管理:
evit(Object obj)  將指定的持久化對象從一級緩存中清除,釋放對象所佔用的內存資源,指定對象從持久化狀態變爲脫管狀態,從而成爲遊離對象。
clear()  將一級緩存中的所有持久化對象清除,釋放其佔用的內存資源。
contains(Object obj) 判斷指定的對象是否存在於一級緩存中。
flush() 刷新一級緩存區的內容,使之與數據庫數據保持同步。
2.Hibernate二級緩存又稱爲“SessionFactory的緩存”。
由於SessionFactory對象的生命週期和應用程序的整個過程對應,因此Hibernate二級緩存是進程範圍或者集羣範圍的緩存,有可能出現併發問題,因此需要採用適當的併發訪問策略,該策略爲被緩存的數據提供了事務隔離級別。
第二級緩存是可選的,是一個可配置的插件,默認下SessionFactory不會啓用這個插件。
Hibernate提供了org.hibernate.cache.CacheProvider接口,它充當緩存插件與Hibernate之間的適配器。
什麼樣的數據適合存放到第二級緩存中?   
1) 很少被修改的數據   
2) 不是很重要的數據,允許出現偶爾併發的數據   
3) 不會被併發訪問的數據   
4) 常量數據 (二級代碼)  

不適合存放到第二級緩存的數據?   
1) 經常被修改的數據   
2) 絕對不允許出現併發訪問的數據,如財務數據,絕對不允許出現併發   
3) 與其他應用共享的數據。
3 查詢緩存 轉載 http://blog.csdn.net/mydwr/article/details/8052802
經常使用的查詢語句,如果啓用了查詢緩存 ,當第一次執行查詢語句時,hibernate會將查詢結果存儲在二級緩存中,以後再次執行該查詢語句時,從緩存中獲取查詢結果,從而提高查詢性能;
hibernate的查詢緩存主要是針對普通屬性結果集的緩存,而對於實體對象的結果集只緩存id;
查詢緩存的生命週期,若當前關聯的表發生修改,那麼查詢緩存的生命週期結束。

兩者相同點
Hibernate與MyBatis都可以是通過SessionFactoryBuider由XML配置文件生成SessionFactory,然後由SessionFactory 生成Session,最後由Session來開啓執行事務和SQL語句。其中SessionFactoryBuider,SessionFactory,Session的生命週期都是差不多的。
Hibernate和MyBatis都支持JDBC和JTA事務處理。
Mybatis優勢
MyBatis可以進行更爲細緻的SQL優化,可以減少查詢字段。
MyBatis容易掌握,而Hibernate門檻較高。
Hibernate優勢
Hibernate的DAO層開發比MyBatis簡單,Mybatis需要維護SQL和結果映射。
Hibernate對對象的維護和緩存要比MyBatis好,對增刪改查的對象的維護要方便。
Hibernate數據庫移植性很好,MyBatis的數據庫移植性不好,不同的數據庫需要寫不同SQL。
Hibernate有更好的二級緩存機制,可以使用第三方緩存。MyBatis本身提供的緩存機制不佳。

轉載 http://blog.csdn.net/an_2016/article/details/52088712
轉載 http://www.cnblogs.com/wean/archive/2012/05/16/2502724.html




發佈了217 篇原創文章 · 獲贊 39 · 訪問量 54萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章