【MyBatis】4:MyBatis與Hibernate的對比分析
在MyBatis系列文章的第一篇, 提到了JDBC程式設計在實際開發中存在的諸多問題,後來介紹了MyBatis之後也沒有分析,MyBatis是如何解決JDBC存在的問題的。在這篇部落格開頭我們先來一起看看,MyBatis是如何解決JDBC程式設計的問題的。當然,所有的ORM框架都是類似的,都是對JDBC的封裝和優化。
1、 資料庫連結建立、釋放頻繁造成系統資源浪費從而影響系統效能,如果使用資料庫連結池可解決此問題。
解決:在SqlMapConfig.xml中配置資料連結池,使用連線池管理資料庫連結。
2、 Sql語句寫在程式碼中造成程式碼不易維護,實際應用sql變化的可能較大,sql變動需要改變java程式碼。
解決:將Sql語句配置在XXXXmapper.xml檔案中與java程式碼分離。
3、 向sql語句傳引數麻煩,因為sql語句的where條件不一定,可能多也可能少,佔位符需要和引數一一對應。
解決:Mybatis自動將java物件對映至sql語句,通過statement中的parameterType定義輸入引數的型別。
4、 對結果集解析麻煩,sql變化導致解析程式碼變化,且解析前需要遍歷
解決:Mybatis自動將sql執行結果對映至java物件,通過statement中的resultType定義輸出結果的型別。
很多人都喜歡將MyBatis和Hibernate這兩個框架放在一起進行比較,可能這兩個都是比較主流的持久層框架,又或許是在實際的專案開發中用的比較多,問題也比較多,因此就有了選擇的需要。
1 從ORM的定義上來講,MyBatis和Hibernate不同,它不是一個完全意義上的的ORM框架,如果說Hibernate是自動化的ORM,那麼MyBatis就是一個半自動化的框架,因為MyBatis需要程式設計師自己去編寫sql語句,正因為如此,MyBatis引入了XML配置檔案或者註解的方式來管理和配置要執行的sql語句,並且將java物件和sql語句對映成最終執行的sql,最後將sql的執行結果再對映成java物件,這樣一來,靈活性極大地提高。
2 在學習代價方面,MyBatis顯然是要更簡單,更加容易上手得多。程式設計師只要瞭解使用MyBatis框架開發的流程,並且會熟練編寫sql語句,那麼就可以快速的開發系統的業務程式碼。反觀Hibernate,學習門檻之高,相信很多學習過Hibernate的小夥伴都深有體會,要想精通Hibernate並且能夠對Hibernate進行一些靈活的處理和優化,將是難上加難,而且如何設計O/R對映,在效能和物件模型之間如何權衡,以及怎樣用好Hibernate需要很強的經驗和能力才可。
3 從開發效率來講,MyBatis的開發效率要低於Hibernate,針對高階查詢,大量的對映檔案編寫工作,讓人很是抓狂。相反,Hibernate封裝的非常好,不用程式設計師自己去寫sql語句,只要像操作物件一下去運算元據庫的資料,開發者無須關心sql的生成和結果對映,真正做到了ORM的關係和物件的對映,更加具有物件導向的味道。
4 關於調優方案,MyBatis可以進行詳細的sql優化設計,可以使用二級快取機制,以及合理的session管理機制。但其最重要的優化點事sql優化,因為MyBatis的sql是手動編寫的,所以我們可以按照我們想要的效果進行重新設計。而Hibernate HQL語句調優需要我們將sql語句列印出來,去分析進行去調整HQL語句,達到優化的目的。另外,Hibernate的調優也可以使用合理的快取策略,儘量使用延遲載入特性,使用批量抓取以及進行合理的O/R對映的設計等方面進行。
5 從擴充套件性上來說,顯然是Hibernate更勝一籌,Hibernate與具體資料庫的關聯只需在xml檔案中進行配置即可,所有的HQL語句與具體使用的資料庫沒有關係,因此移植性很好。而MyBatis的專案中所有的sql語句都是依賴所使用的資料庫的,因此不同的資料庫需要編寫不同的對映檔案,移植性不好。
6 從效能上來說,Hibernate在JDBC上進行了一次封裝,而MyBatis是基於原生的JDBC的,因此從最初的框架設計上,MyBatis天生就具有執行速度上的優勢。另外在進行關聯查詢時,Hibernate為了保證POJO的資料完整性,需要將關聯的資料全部載入,需要額外的查詢更多的資料,而MyBatis載入的欄位很乾淨,沒有太多的冗餘的欄位,直接對映入關聯中,從這點上來講,MyBatis也是優於Hibernate的。
7關於Hibernate和MyBatis的對比分析,說了不少了,其實使用哪個要看具體的使用場景,對於管理平臺,需要展現的資訊量較大,併發要求不高時,使用Hibernate比較好,而對於一些小的網際網路網站,業務需求變動比較頻繁,併發量也比較高,則適合使用MyBatis。
總之,按照使用者的需求在有限的資源環境下只要能做出維護性、擴充套件性良好的軟體架構都是好架構,所以框架只有適合才是最好。
相關文章
- Hibernate與 MyBatis的比較MyBatis
- Hibernate與mybatis比較MyBatis
- Hibernate與 MyBatis的比較(轉)MyBatis
- Hibernate基於Maven入門例項,與MyBatis比對MavenMyBatis
- spring-mybatis與原生mybatis使用對比SpringMyBatis
- Mybatis與傳統jdbc和Hibernate的比較MyBatisJDBC
- mybatis與hibernate的區別MyBatis
- MyBatis 與 Hibernate 有哪些不同?MyBatis
- Java Web之理解 Hibernate And MyBatisJavaWebMyBatis
- MyBatis加強(4)~mybatis 外掛開發MyBatis
- MyBatis基礎:MyBatis關聯查詢(4)MyBatis
- mybatis入門程式:刪除、更新使用者&&hibernate和mybatis的區別MyBatis
- MyBatis3教程 - MyBatis Interceptor原始碼分析MyBatisS3原始碼
- JPA和mybatis的CRUD比較MyBatis
- Mybatis原始碼分析MyBatis原始碼
- 精盡MyBatis原始碼分析 - MyBatis初始化(二)之載入 Mapper 介面與 XML 對映檔案MyBatis原始碼APPXML
- mybatis #與$的區別MyBatis
- Mybatis基礎:Mybatis對映配置檔案,Mybatis核心配置檔案,Mybatis傳統方式開發MyBatis
- MyBatis和Hibernate相比,優勢在哪裡?MyBatis
- 精盡MyBatis原始碼分析 - MyBatis-Spring 原始碼分析MyBatis原始碼Spring
- mybatis mapper解析(4)MyBatisAPP
- Mybatis原始碼分析(一)Mybatis的架構設計簡介MyBatis原始碼架構
- MyBatis學習 之 一、MyBatis簡介與配置MyBatis+Spring+MySqlMyBatisSpringMySql
- Mybatis結果對映MyBatis
- MyBatis研習錄(01)——MyBatis概述與入門MyBatis
- MyBatis對動態SQL的支援MyBatisSQL
- MyBatis原始碼分析(一)MyBatis原始碼
- MyBatis原始碼分析(二)MyBatis原始碼
- 二、mybatis查詢分析MyBatis
- Mybatis【15】-- Mybatis一對一多表關聯查詢MyBatis
- Mybatis原始碼解析4——SqlSessionMyBatis原始碼SQLSession
- MyBatis4:動態SQLMyBatisSQL
- Mybatis學習筆記(4)-高階對映之一對多對映MyBatis筆記
- Mybatis【2.2】-- Mybatis關於建立SqlSession原始碼分析的幾點疑問?MyBatisSQLSession原始碼
- 【MyBatis】幾種批量插入效率的比較MyBatis
- MyBatis(二)MyBatis入門程式(MyBatis demo)MyBatis
- Mybatis 基礎xml對映MyBatisXML
- mybatis 一對一關聯MyBatis