1. 程式人生 > >jdbc,mybatis,hibernate各自有優缺點以及區別

jdbc,mybatis,hibernate各自有優缺點以及區別

cti 這就是 時間 nat 動態 java 可讀性 開發效率 效率

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要大些。

jdbc,mybatis,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框架。

jdbc,mybatis,hibernate各自有優缺點以及區別