去面試已經是第三次別問到了,應該是比較常問的問題了
1、開發上手難度
hibernate的真正掌握(封裝的功能和特性非常多)要比mybatis來得難。
在真正產品級應用上要用hibernate,不僅對開發人員的要求高,hibernate往往還不適合(多表關聯查詢等)。
2、系統調優調優方案對比
hibernate:
* 制定合理的快取策略;
* 盡量使用延遲載入特性;
* 採用合理的session管理機制;
* 使用批量抓取,設定合理的批處理引數(batch_size);
* 進行合理的o/r對映設計
mybatis:
* mybatis在session方面和hibernate的session生命週期是一致的,同樣需要合理的session管理機制。mybatis同樣具有二級快取機制。
* mybatis可以進行詳細的sql優化設計。
3、sql優化方面
hibernate的查詢會將表中的所有字段查詢出來,這一點會有效能消耗。
hibernate也可以自己寫sql來指定需要查詢的字段,但這樣就破壞了hibernate開發的簡潔性。
mybatis的sql是手動編寫的,所以可以按需求指定查詢的字段。
總的來說,hibernate使用的是封裝好,通用的sql來應付所有場景,而mybatis是針對響應的場景設計的sql。mybatis的sql會更靈活、可控性更好、更優化。
4、移植性
hibernate與具體資料庫的關聯只需在xml檔案中配置即可,所有的hql語句與具體使用的資料庫無關,移植性很好。
mybatis專案中所有的sql語句都是依賴所用的資料庫的,所以不同資料庫型別的支援不好。
5、jdbc
hibernate是在jdbc上進行了一次封裝。
mybatis是基於原生的jdbc的。mybatis有執行速度上的優勢。
6、功能、特性豐富程度
hibernate提供了諸多功能和特性。要全掌握很難。
mybatis 自身功能很有限,但mybatis支援plugin,可以使用開源的plugin來擴充套件功能。
7、動態sql
hibernate不支援
實際專案關於hibernate和mybatis的選型:
1、資料量:有以下情況最好選用mybatis
如果有超過千萬級別的表
如果有單次業務大批量資料提交的需求(百萬條及以上的),這個尤其不建議用hibernate
如果有單次業務大批量讀取需求(百萬條及以上的)(注,hibernate多表查詢比較費勁,用不好很容易造成效能問題)
2、表關聯複雜度
如果主要業務表的關聯表超過20個(大概值),不建議使用hibernate
3、人員
如果開發成員多數不是多年使用hibernate的情況,建議使用mybatis
4、資料庫對於專案的重要程度
如果專案要求對於資料庫可控性好,可深度調優,用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 兩種版本的同一應用程式經常很相似。關於如何裝載物件和執行查詢,我們來看看下面的例子...