mybatis與hibernate的區別

qq_36335396發表於2018-03-11
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會更靈活、可控性更好、更優化。

PANzexiang...
4、移植性
Hibernate與具體資料庫的關聯只需在XML檔案中配置即可,所有的HQL語句與具體使用的資料庫無關,移植性很好。
MyBatis專案中所有的SQL語句都是依賴所用的資料庫的,所以不同資料庫型別的支援不好。
5、JDBC
Hibernate是在JDBC上進行了一次封裝。
Mybatis是基於原生的JDBC的。Mybatis有執行速度上的優勢。

 

6、功能、特性豐富程度

Hibernate提供了諸多功能和特性。要全掌握很難。
Mybatis 自身功能很有限,但Mybatis支援plugin,可以使用開源的plugin來擴充套件功能。
7、動態SQL
Mybatis mapper xml 支援動態SQL
Hibernate不支援
實際專案關於Hibernate和Mybatis的選型:

1、資料量:有以下情況最好選用Mybatis
如果有超過千萬級別的表
如果有單次業務大批量資料提交的需求(百萬條及以上的),這個尤其不建議用Hibernate
如果有單次業務大批量讀取需求(百萬條及以上的)(注,hibernate多表查詢比較費勁,用不好很容易造成效能問題)

2、表關聯複雜度
如果主要業務表的關聯表超過20個(大概值),不建議使用hibernate
3、人員
如果開發成員多數不是多年使用hibernate的情況,建議使用mybatis

4、資料庫對於專案的重要程度

如果專案要求對於資料庫可控性好,可深度調優,用mybatis

相關文章