hibernate與mybatis對比

出身

hibernate:出身於.NET(開發平臺),現在已成爲JBoss(類似於Tomcat服務器)的一部分。
mybatis:屬於Apache(開發組織)的子項目。

簡介

hibernate:對數據庫提供了較爲完整的封裝,尤其是實體和表之間的映射,以及SQL的自動生成和執行。我們往往只需要定義實體和表的映射,即可通過hibernate提供的方法完成持久層操作,甚至我們不需要對SQL熟練掌握,hibernate會根據制定的儲存邏輯,自動的生成對應的SQL,並調用JDBC接口加以執行。
mybatis:mybatis的着力點在於實體與表之間的映射,然後通過配置文件,將SQL所需的參數,以及返回的結果映射到指定的實體。

開發速度

hibernate:學習成本大,掌握起來要比mybatis難,不易上手,支持的工具多,更新快,最高版本5.2,開發者無需關注sql語句的使用。
mybatis:學習成本低,掌握相比hibernate簡單,易上手,支持工具少,更新慢,最高版本3.4,開發者必須着力用sql語句。

調優方面

hibernate:1、制定合理緩存策略;2、儘量使用延遲加載;3、採用合理的session管理機制;4、使用批量抓取,設定合理的批處理參數;5、進行實體和表合理的映射。
mybatis:1、session同hibernate的session生命週期一致,同樣需要合理的session管理機制;2、同樣有二級緩存機制,指定合理緩存策略;3、詳細的sql優化設計。

SQL優化方面

hibernate:默認查詢會將所有的字段查詢出來,這一點會消耗性能,也可以自己手寫sql,但是這樣就破壞了hibernate開發的簡潔性。hibernate有自己的日誌統計。
mybatis:由於是手動編寫的sql,所以可以按需求指定查詢字段。mybatis本身不帶日誌統計,使用第三方採集日誌,如:log4j。

擴展性方面

hibernate:與數據庫的關聯只需在xml文件中配置即可,所用的hql語句與具體使用的數據庫無關,移植性很好。
mybatis:項目中所用的sql語句都是依賴所用的數據庫,所以不同的數據庫類型,支持的不是很好。

操作方面

hibernate:開發者不需要理會底層數據庫系統的細節,只需要關注對象的狀態。hibernate對實體關聯(多表查詢)有着良好的機制,對於每一個關聯關係都可以詳細的設置是否延遲加載,並且提供關聯查詢,查詢抓取,子查詢抓取,批量抓取四種模式,他是詳細配置和處理的。
mybatis:開發者需要手動編寫sql語句,需要對sql參數以及結果進行詳細的管理。

緩存機制方面

hibernate:hibernate有一級(session緩存,默認開啓),二級(sessionFactory緩存,又分爲內置緩存和外置緩存,默認關閉),查詢緩存(默認關閉)。
mybatis:mybatis有一級(session緩存,默認開啓),二級緩存(sessionFactory緩存,默認關閉)。和spring集成後一級緩存會失效,二級緩存可能出現髒讀。所以很難用。

相同點:

兩者的二級緩存除了系統默認的配置外,都可以通過自定義或者使用第三方緩存方案。因爲兩者都是用session開啓事物,執行sql,並且生命週期大致相同。

不同點:

hibernate:二級緩存針對的是實體與表之間映射的緩存。如果因爲緩存出現了髒讀,系統會報出錯誤並提示。
mybatis:二級緩存根據配置文件中namespace的命名來進行緩存,不同的namespace可以制定不同的緩存機制。因此用二級緩存容易有髒讀,並且不會提示。

一句話總結

hibernate:強大、方便、高效、複雜、間接、全自動化。
mybatis:小巧、方便、高效、簡單、直接、半自動化。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章