hibernate和mybatis的區別


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

Mybatis mapper xml 支持動態SQL

Hibernate不支持

 

 

實際項目關於Hibernate和Mybatis的選型:

1、數據量:有以下情況最好選用Mybatis

如果有超過千萬級別的表

如果有單次業務大批量數據提交的需求(百萬條及以上的),這個尤其不建議用Hibernate

如果有單次業務大批量讀取需求(百萬條及以上的)(注,hibernate多表查詢比較費勁,用不好很容易造成性能問題)

2、表關聯復雜度

如果主要業務表的關聯表超過20個(大概值),不建議使用hibernate

3、人員

如果開發成員多數不是多年使用hibernate的情況,建議使用mybatis

4、數據庫對於項目的重要程度

如果項目要求對於數據庫可控性好,可深度調優,用mybatis


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM