1. 程式人生 > >jdbc、hibernate、MyBatis各自的優缺點以及區別

jdbc、hibernate、MyBatis各自的優缺點以及區別

先比較下jdbc程式設計和hibernate程式設計各自的優缺點。    JDBC:    我們平時使用jdbc進行程式設計,大致需要下面幾個步驟:    1,使用jdbc程式設計需要連線資料庫,註冊驅動和資料庫資訊    2,操作Connection,開啟Statement物件    3,通過Statement物件執行SQL,返回結果到ResultSet物件    4,使用ResultSet讀取資料,然後通過程式碼轉化為具體的POJO物件    5,關閉資料庫相關的資源   jdbc的缺點:   一:工作量比較大,需要連線,然後處理jdbc底層事務,處理資料型別,還需要操作Connection,Statement物件和ResultSet物件去拿資料並關閉他們。    二:我們對jdbc程式設計可能產生的異常進行捕捉處理並正確關閉資源    由於JDBC存在的缺陷,在實際工作中我們很少直接使用jdbc進行程式設計,用的更多的是ORM物件關係模型來操作資料庫,Hibernate就是一個ORM模型      Hibernate:     Hibernate是建立在若干POJO通過xml對映檔案(或註解)提供的規則對映到資料庫表上的。我們可以通過POJO直接操作資料庫的資料,他提供的是一種全表對映的模型。相對而言,Hibernate對JDBC的封裝程度還是比較高的,我們已經不需要寫SQL,只要使用HQL語言就可以了。     使用Hibernate進行程式設計有以下好處:     1,消除了程式碼的對映規則,它全部分離到了xml或者註解裡面去配置。     2,無需在管理資料庫連線,它也配置到xml裡面了。     3,一個會話中不需要操作多個物件,只需要操作Session物件。     4,關閉資源只需要關閉一個Session便可。     這就是Hibernate的優勢,在配置了對映檔案和資料庫連線檔案後,Hibernate就可以通過Session操作,非常容易,消除了jdbc帶來的大量程式碼,大大提高了程式設計的簡易性和可讀性。Hibernate還提供了級聯,快取,對映,一對多等功能。Hibernate是全表對映,通過HQL去操作pojo進而操作資料庫的資料。     Hibernate的缺點:     1,全表對映帶來的不便,比如更新時需要傳送所有的欄位。     2,無法根據不同的條件組裝不同的SQL。     3,對多表關聯和複雜的sql查詢支援較差,需要自己寫sql,返回後,需要自己將資料封裝為pojo。     4,不能有效的支援儲存過程。     5,雖然有HQL,但是效能較差,大型網際網路系統往往需要優化sql,而hibernate做不到。 Mybatis:     為了解決Hibernate的不足,Mybatis出現了,Mybatis是半自動的框架。之所以稱它為半自動,是因為它需要手工匹配提供POJO,sql和對映關係,而全表對映的Hibernate只需要提供pojo和對映關係即可。    Mybatis需要提供的對映檔案包含了一下三個部分:sql,對映規則,pojo。在Mybatis裡面你需要自己編寫sql,雖然比Hibernate配置多,但是Mybatis可以配置動態sql,解決了hibernate表名根據時間變化,不同條件下列不一樣的問題,同時你也可以對sql進行優化,通過配置決定你的sql對映規則,也能支援儲存過程,所以對於一些複雜和需要優化效能的sql查詢它就更加方便。Mybatis幾乎可以做到jdbc所有能做到的事情。 什麼時候使用Hibernate,Mybatis     Hibernate作為留下的
Java 
orm框架,它確實程式設計簡易,需要我們提供對映的規則,完全可以通過IDE生成,同時無需編寫sql確實開發效率優於Mybatis。此外Hibernate還提供了快取,日誌,級聯等強大的功能,但是Hibernate的缺陷也是十分明顯,多表關聯複雜sql,資料系統許可權限制,根據條件變化的sql,儲存過程等場景使用Hibernate十分不方便,而效能又難以通過sql優化,所以註定了Hibernate只適用於在場景不太複雜,要求效能不太苛刻的時候使用。     如果你需要一個靈活的,可以動態生成對映關係的框架,那麼Mybatis確實是一個最好的選擇。它幾乎可以替代jdbc,擁有動態列,動態表名,儲存過程支援,同時提供了簡易的快取,日誌,級聯。但是它的缺陷是需要你提供對映規則和sql,所以開發工作量比hibernate要大些。 1)從層次上看,JDBC是較底層的持久層操作方式,而Hibernate和MyBatis都是在JDBC的基礎上進行了封裝使其更加方便程式設計師對持久層的操作。 2)從功能上看,JDBC就是簡單的建立
資料庫
連線,然後建立statement,將sql語句傳給statement去執行,如果是有返回結果的查詢語句,會將查詢結果放到ResultSet物件中,通過對ResultSet物件的遍歷操作來獲取資料;Hibernate是將資料庫中的資料表對映為持久層的Java物件,對sql語句進行修改和優化比較困難;MyBatis是將sql語句中的輸入引數和輸出引數對映為java物件,sql修改和優化比較方便. 3)從使用上看,如果進行底層程式設計,而且對效能要求極高的話,應該採用JDBC的方式;如果要對資料庫進行完整性控制的話建議使用Hibernate;如果要靈活使用sql語句的話建議採用MyBatis框架。