hibernate與myBatis的優劣比較

2021-07-25 12:40:32 字數 1610 閱讀 7550

去面試已經是第三次別問到了,應該是比較常問的問題了

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 兩種版本的同一應用程式經常很相似。關於如何裝載物件和執行查詢,我們來看看下面的例子...