mybatis與hibernate的區別
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
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
相關文章
- mybatis #與$的區別MyBatis
- mybatis入門程式:刪除、更新使用者&&hibernate和mybatis的區別MyBatis
- Hibernate與 MyBatis的比較MyBatis
- 【MyBatis】4:MyBatis與Hibernate的對比分析MyBatis
- Hibernate之openSession與getCurrentSession的區別Session
- Hibernate與mybatis比較MyBatis
- Hibernate與 MyBatis的比較(轉)MyBatis
- MyBatis 與 Hibernate 有哪些不同?MyBatis
- Mybatis與傳統jdbc和Hibernate的比較MyBatisJDBC
- MyBatis中#{}和${}的區別詳解MyBatis
- Mybatis中#{}和${}傳參的區別及#和$的區別小結MyBatis
- Hibernate get和load區別
- mybatis collection解析以及和association的區別MyBatis
- Hibernate的Session的get()和load()方法區別Session
- ??與?:的區別
- 淺析mybatis中${}和#{}取值區別MyBatis
- Hibernate和Ibatis區別和比較BAT
- Hibernate中Session.load/get區別Session
- MySQL的@與@@區別MySql
- Null 與 “” 的區別Null
- Hibernate基於Maven入門例項,與MyBatis比對MavenMyBatis
- &與&&, |與||區別
- 【Java面試】Mybatis中#{}和${}的區別是什麼?Java面試MyBatis
- mybatis xml裡的 resultMap、resultOrdered、resultSets、resultSetType、resultType 區別MyBatisXML
- MyBatis-06-Spring的SqlSession和原始區別MyBatisSpringSQLSession
- hibernate延遲載入(get和load的區別)
- in與exist , not in與not exist 的區別
- MyBatis中的<where>標籤和where子句的區別MyBatis
- Java Web之理解 Hibernate And MyBatisJavaWebMyBatis
- Mybatis中updateByPrimaryKeySelective和updateByPrimaryKey的用法區別MyBatis
- hibernate中建立session的兩種方式方式,區別在哪裡?Session
- LocalSessionFactoryBean載入Hibernate 對映的幾種方式及區別SessionBean
- CentOS 與 Ubuntu 的區別CentOSUbuntu
- artice與section的區別
- GET 與 POST 的區別
- WebSocket 與 Socket 的區別Web
- Postgresql與MySQL的區別MySql
- chown與chmod的區別