Hibernate和MyBatis的區別

廢話不多說,直接上乾貨

 

1、Hibernate的優/缺點

  Hibernate
優點

(1)不需要編寫的SQL語句(不需要編輯JDBC),只需要操作相應的對象就可以了,就可以能夠存儲、更新、刪除、加載對象,可以提高生產效率

(2)使用Hibernate,移植性好(只要使用Hibernate標準開發,更換數據庫時,只需要配置相應的配置文件就可以了,不需要做其它任務的操作)

                   (3)Hibernate實現了透明持久化。當保存一個對象時,這個對象不需要繼承Hibernate中的任何類、實現任何接口,

只是個純粹的單純對象—稱為POJO對象(最純粹的對象—這個對象沒有繼承第三方框架的任何類和實現它的任何接口)

(4)Hibernate是一個沒有侵入性的框架,沒有侵入性的框架我們一般稱為輕量級框架

(5)Hibernate代碼測試方便

(6)有更好的二級緩存機制,可以使用第三方緩存

缺點

(1)使用數據庫特性的語句,將很難調優

(2)對大批量數據更新存在問題

(3)系統中存在大量的攻擊查詢功能

(4)學習門檻不低,要精通門檻更高。

 2、MyBatis的優/缺點

  MyBatis
優點

1、入門簡單,即學即用

2、基於sQL語句編程,相當靈活,不會對應用程序或者數據庫的現有設計造成任何影響SQL寫在XML里,解除 sql與程序代碼的耦合,便於統一管理;提供 XML標籤,支持編寫動態SQL語句,並可重用。

3、與JDBC相比,減少了50%以上的代碼量,消除了JDBC大量冗餘的代碼,不需要手動開關連接;

4、很好的與各種數據庫兼容(因為MyBatis 使用JDBC來連接數據庫,所以只要JDBC支持的數據庫MyBatis都支持)。

5、能夠與Spring很好的集成;

6、提供映射標籤,支持對象與數據庫的ORM字段關係映射;提供對象關係映射標籤,支持對象關係組件維護。

缺點

1、SQL語句的編寫工作量較大,尤其當字段多、關聯表多時,對開發人員編寫SQL語句的功底有一定要求。

 2、SQL語句依賴於數據庫,導致數據庫移植性差,不能隨意更換數據庫。

3、二級緩存機制不佳。

 

3、Hibernate與MyBatis對比

  MyBatis Hibernate
量級: 輕量級,上手簡單,插件多 重量級,功能齊全,精通較難(ps:此處指的重量級是相對於MyBatis來說的,Hibernate在框架中是屬於輕量級的)
SQL自由度: SQL自由度高。提供更靈活的SQL編寫方式 SQL自由度低,僅對基本的SQL語法有較好支持。不過Hibernate也支持自己手動寫SQL。
開發效率: 低。需要維護SQL。 高。DAO層開發更簡單,支持JPA。
數據庫無關性: 差。所有SQL都是依賴數據庫書寫的,需要針對特定數據庫維護SQL. 好。高度解耦,封裝了JDBC的實現,只需在配置中指定數據庫。
緩存: 自身的緩存機制較差。 自身的緩存機制較好,可避免臟讀。
映射: POJo與SQL的映射,將SQL所需的參數、返回的結果字段映射到指定PoJo,半ORM,實際是sQL mapping POJO與數據庫表的映射,自動生成和執行SQL,完全的ORM
性能: 性能稍高 用封裝方法性能會降低一點( SQL生成、全字段查詢),用封裝方法性能會降低一點( SQL生成、全字段查詢),
適用場景: 擅長複雜的查詢,適用於分析型系統。計算機集群需要跨數據庫事務時,Mybatis更靈活。 面向對象的思維方式更有利於業務系統建模分析,適合單數據庫,數據量小,無多表關聯,數據庫結構不穩定的項目。

 

Tags: