首先簡單介紹下兩者的概念:
hibernate:hibernate
是當前最流行的orm
框架,對資料庫結構提供了較為完整的封裝。
mybatis:mybatis同樣也是非常流行的orm框架,主要著力點其次具體從幾個方面說一下兩者的區別:在於pojo
與sql
之間的對映關係。
1.兩者最大的區別:針對簡單邏輯,
hibernate和mybatis都有相應的**生成工具,可以生成簡單基本的dao層方法。
針對高階查詢,mybatis
需要手動編寫
sql語句,以及
resultmap
。而hibernate
有良好的對映機制,開發者無需關心
sql的生成與結果對映,可以更專注於業務流程。
2.開發難度對比hibernate的開發難度要大於mybatis。主要由於hibernate比較複雜、龐大,學習週期較長。
而mybatis則相對簡單一些,並且mybatis主要依賴於sql的書寫,讓開發者感覺更熟悉。
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
本身提供的快取機制不佳。
spring整合使用持久層框架mybatis(二)
id sqlsessionfactory class org.mybatis.spring.sqlsessionfactorybean name datasource ref datasource name configlocation value classpath mybatis config....
hibernate與mybaitis快取對比
hibernate的一級快取為session,是內建快取,不可解除安裝。二級快取為sessionfactory,包含了內建快取和外接快取,sessionfactory 控制的程序級快取。是全域性共享的快取,凡是會呼叫二級快取的查詢方法 都會從中受益。當查詢時候,會首先查詢一級快取中的資料,如果沒有再...
Hibernate與JDO肩並肩
在theserverside.com上有一些人聲稱jdo的開發人員已經把jdo帶向錯誤的道路,並且指出hibernate相對更優秀。然而,根據我的經驗 它們有許多共同的特徵,包括 因此,jdo 和 hibernate 兩種版本的同一應用程式經常很相似。關於如何裝載物件和執行查詢,我們來看看下面的例子...