1. 程式人生 > >Hibernate框架預覽以及基礎介紹

Hibernate框架預覽以及基礎介紹

前言

從本節我們開始進入到對於Hibernate框架的學習,當前Hibernate框架還未正式釋出6.0穩定版本,所以這裡我們以5.4.12Final版本進行講解。

Hibernate框架

Hibernate是一個物件/關係對映(ORM)解決方案, 物件關係對映或物件關係管理是將應用程式域模型物件對映到關係資料庫表的程式設計技術,它是基於Java的ORM框架,用於將應用程式域物件對映到關係資料庫表,Hibernate提供了對Java Persistence API(JPA)的實現或提供程式以及自身所提供的API,使其成為具有鬆散耦合優勢的ORM工具的絕佳選擇,我們可以利用Hibernate的永續性API用於CRUD操作,同時Hibernate框架也提供了一個選項,可以使用JPA註解以及基於XML的配置將POJO物件對映到關係資料庫表。Java Persistence API(JPA)提供了用於管理應用程式中的關係資料的規範,JPA規範是通過javax.persistence包中的註解而定義的,使用JPA註解有助於我們編寫獨立於實現的程式碼,Hibernate通過使用JDBC與資料庫進行互動。以下是Hibernate架構示意圖:

 

Hibernate作為ORM解決方案,它作為Java應用程式資料訪問層和關係資料庫之間的橋樑,Java應用程式利用Hibernate API來載入,儲存,查詢等等其域資料。 作為JPA提供程式,Hibernate實現Java Persistence API規範,我們可以在下圖中直觀地看到JPA介面與Hibernate特定實現之間的關聯:

SessionFactory (org.hibernate.SessionFactory) 

應用程式域模型到資料庫的對映的執行緒安全(且不可變)表示形式。它作為org.hibernate.Session例項的工廠,EntityManagerFactory和JPA的SessionFactory等效,此二者最終還是會會聚到同一個SessionFactory實現中,建立一個SessionFactory的開銷非常大,因為SessionFactory維護所有Session中使用的服務,例如二級快取,連線池,事務系統整合等,所以,對於任何給定的資料庫,該應用程式應該僅具有一個關聯的SessionFactory。

Session (org.hibernate.Session)

單執行緒且作為短生命週期物件在概念上為“工作單元”建模。它通過JPA中的EntityManager而表示,在背後,Hibernate會話包裝了JDBC java.sql.Connection並充當org.hibernate.Transaction例項的工廠,它維護應用程式域模型的一般“可重複讀取”永續性上下文(一級快取)。

Transaction (org.hibernate.Transaction)

單執行緒且作為短生命週期物件用於劃分應用程式的單個物理事務邊界。它作為抽象API,以將應用程式與使用中的基礎事務系統(JDBC或JTA)進行有效隔離。

Hibernate框架優點 

【1】它消除了JDBC附帶的所有模板程式碼,讓我們更專注於業務邏輯。

【2】它提供對XML以及JPA註解的支援,使我們的程式碼實現完全獨立。

【3】它提供與SQL類似的強大查詢語言(HQL)且完全面向物件。

【4】它是Red Hat Community的一個開源專案,已在全球範圍內使用,因此這是一個更好的選擇,因為學習曲線很小,並且有大量的線上文件,並且可以在論壇中輕鬆獲得幫助。

【5】它易於與其他Java EE框架整合,因此非常流行,Spring框架也提供了將Hibernate與Spring應用程式整合的內建支援。

【6】它支援使用代理物件進行延遲載入,並且僅在需要時才執行實際的資料庫查詢。

【7】它提供快取有助於我們獲得更好的效能。

Hibernate與JDBC相比有什麼優勢?

【1】它消除了JDBC API附帶的許多模板程式碼,更清晰易讀。

【2】它支援繼承,關聯和集合,而JDBC API不提供這些功能。

【3】它隱式提供事務管理,實際上,大多數查詢無法在事務外部執行,而在JDBC API中,我們需要使用commit和rollback編寫用於事務管理的程式碼。由於JDBC API會丟擲SQLException,這是一個已檢查的異常,因此我們需要編寫許多try-catch塊程式碼,在大多數情況下,它在每個JDBC呼叫中都是多餘的, Hibernate封裝了JDBC異常並丟擲JDBCException或HibernateException未經檢查的異常,因此我們不需要編寫程式碼來處理它,同時Hibernate內建的事務管理消除了try-catch塊的使用。

【4】它提供查詢語言(HQL)且更加面向物件,與Java程式語言非常接近,而對於JDBC,我們需要編寫本機SQL查詢。

【5】它支援更好的效能快取,而JDBC查詢不會進行快取,因此效能很低。

【6】它提供了一個選項,通過它我們也可以建立資料庫表,而JDBC表必須存在於資料庫中。

【7】它所提供的配置有助於我們將JDBC之類的連線以及JNDI DataSource用於連線池,這是企業應用程式中非常重要的功能,而JDBC API完全沒有。

【8】它支援JPA註解,因此程式碼與實現無關,並且可以輕鬆地用其他ORM工具進行替換,JDBC程式碼與應用程式緊密結合。

總結

本節我們初步認識Hibernate框架的架構、優點以及對比JDBC其強大優勢,從下一節我們開始正式進入Hibernate框架的學