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分頁和投影
分頁 dao 分頁查詢 param index param pagesize return public listfindbypage integer index,integer pagesize service public listfindbypage integer index,integer...
spring MVC和hibernate的結合
我們在沒有用註解寫spring配置檔案的時候 會在spring配置檔案中定義dao層的bean,這樣我們在service層中,寫setdao方法,就可以直接通過介面呼叫dao層。用了註解寫法後 在配置檔案中不用再寫dao層的bean。只需要在dao實現類中加入 repository public c...