Hibernate 總概述

一、本節目標

本節課程主要介紹【Hibernate】的相關知識,將會涉及以下內容:

·  什麼是 Hibernate

·  Hibernate 體系結構

·  Hibernate 基本APIs

·  Hibernate 的優點

二、什麼是 Hibernate

摘自百度百科:

Hibernate是一個開放源代碼的對象關係映射框架,它JDBC進行了非常輕量級的對象封裝,使得Java程序員可以隨心所欲的使用對象編程思維來 操縱數據庫。 Hibernate可以應用在任何使用JDBC的場合,既可以在Java的客戶端程序使用,也可以在Servlet/JSP的Web應用中使用,最具革命 意義的是,Hibernate可以在應用EJBJ2EE架構中取代CMP,完成數據持久化的重任。

Hibernate 是一個開源框架,與 Struts 這種 MVC(Model-View-Controller) 框架不同的是,Hibernate 是一種 ORM(Object/RelationalMapping) 框架。

ORM 意爲對象關係映射,因此 Hibernate 會在 Java 對象和關係數據庫之間建立某種映射,以達到存取 Java 對象的目的,是實現持久化存儲(將內存中的數據存儲在關係型的數據庫、磁盤文件、XML數據文件中等等)的一種解決方案。

Hibernate 不僅管理 Java 類到數據庫表的映射(包括從 Java 數據類型到 SQL 數據類型的映射),還提供數據查詢和獲取數據的方法,可以大幅度減少開發時人工使用 SQL 和 JDBC 處理數據的時間。這正是它的設計目標,即將軟件開發人員從大量相同的數據持久層相關編程工作中解放出來。

三、 Hibernate 體系結構

一個簡要的 Hibernate 整體體系結構大致如下圖所示:


Application:應用

persistent objects:持續化對象

properties:屬性,性能

XML Mapping:XML映射

從上圖可以看出,Hibernate 使用數據庫(Database)和配置信息(hibernate.properties 等)來爲應用程序提供持久化服務(以及持久的對象Persistent Objects)。

我們再來看看 Hibernate 運行時的體系結構。由於Hibernate非常靈活,且支持多種應用方案,所以這裏我們只描述一下兩種極端的情況。

1、 “輕型”的體系結構方案

要求應用程序提供自己的 JDBC 連接並管理自己的事務。這種方案使用了 Hibernate API 的最小子集:

2、 “全面解決”的體系結構方案

將應用層從底層的 JDBC/JTA API 中抽象出來,而讓Hibernate 來處理這些細節:

四、基本 APIs

1、SessionFactory(org.hibernate.SessionFactory)

對於單個數據庫映射關係經過編譯後的內存緩存,它是線程安全且不可變的。是Session 生成的工廠實例,也是 ConnectionProvider 的一個客戶端(會用到ConnectionProvider)。它在進程或集羣的級別上,爲那些在事務之前可重複使用的數據提供了選擇性的二級緩存。

2、Session(org.hibernate.Session)

提供應用程序和持久化存儲介質之間的一個單線程的會話對象,此對象生存期很短。它隱藏了 JDBC 連接,也是 Transaction 的工廠實例。對於應用的持久化對象及其集合,它提供了一個一級緩存;當遍歷導航對象圖或者根據持久化標識查找對象時,會用到這個一級緩存。

3、持久化的對象及其集合

具有持久化狀態和業務功能的單線程對象,同樣生存期很短。這些對象可能是普通的JavaBeans/POJOs(Plain Ordinary Java Object),它們只能與一個 Session 相關聯。一旦 Session 被關閉,它們就會脫離持久化狀態,並且可以被應用程序的任何層使用(比如跟表示層打交道的 data transfer objects)

4、瞬態(transient)、脫管狀態(detached)的對象及其集合

持久化的類目前沒有和 Session 相關聯的實例。他們可能是因爲在被應用實例化後還沒有被持久化,也可能是由於實例化它們的 Session 對象已經被關閉,從而脫離了持久化狀態。

5、事務(Transaction)(org.hibernate.Transaction)

(可選的)它是應用程序用來指定原子操作單元範圍的對象,是一個單線程的、短生存週期的對象。它使用抽象把應用從底層的 JDBC、JTA 以及 CORBA 事務中隔離開。在某些情況下,一個 Session 可能涵蓋多個 Transactions 對象。儘管使用該對象是可選的,但事務的劃分(無論是使用底層的 API 還是使用 Transaction 對象)都是不可選的。

6、ConnectionProvider(org.hibernate.connection.ConnectionProvider)

(可選的)JDBC 連接的工廠和連接池。它通過抽象把應用從底層的 DataSource 或者 DriverManager 隔離開。這並不開放給應用程序使用,但對開發者而言是可以擴展或實現的。

7、TransactionFactory(org.hibernate.TransactionFactory)

(可選的)生成 Transaction 對象實例的工廠。僅供開發者擴展/實現用,並不開放給應用程序使用。

8、擴展接口(Extension Interfaces)

Hibernate 提供了很多可選的擴展接口,你可以通過實現它們來定製你的持久層的行爲。

五、 Hibernate 的優點

  • Hibernate 使用 Java 反射機制 而不是字節碼增強程序來實現透明性。
  • Hibernate 的性能好,因爲它是個輕量級框架。映射的靈活性很出色。
  • 它支持各種關係數據庫,從 一對一 到 多對多 的各種複雜關係。

六、Hibernate的核心接口和類

Hibernate的核心類和接口一共有6個,分別爲:Session、SessionFactory、Transaction、Query、Criteria和Configuration。這6個核心類和接口在任何開發中都會用到。通過這些接口,不僅可以對持久化對象進行存取,還能夠進行事務控制

1、Session

Session接口負責執行被持久化對象的CRUD操作(CRUD的任務是完成與數據庫的交流,包含了很多常見的SQL語句)。但需要注意的是Session對象是非線程安全的。同時,Hibernate的session不同於JSP應用中的HttpSession。這裏當使用session這個術語時,其實指的是Hibernate中的session,而以後會將HttpSession對象稱爲用戶session。

2、SessionFactory

SessionFactory接口負責初始化Hibernate。它充當數據存儲源的代理,並負責創建Session對象。這裏用到了工廠模式。需要注意的是SessionFactory並不是輕量級的,因爲一般情況下,一個項目通常只需要一個SessionFactory就夠,當需要操作多個數據庫時,可以爲每個數據庫指定一個SessionFactory。

3、Transaction

Transaction 接口是一個可選的API,可以選擇不使用這個接口,取而代之的是Hibernate 的設計者自己寫的底層事務處理代碼。 Transaction 接口是對實際事務實現的一個抽象,這些實現包括JDBC的事務、JTA 中的UserTransaction、甚至可以是CORBA 事務。之所以這樣設計是能讓開發者能夠使用一個統一事務的操作界面,使得自己的項目可以在不同的環境和容器之間方便地移植。

4、Query

Query接口讓你方便地對數據庫及持久對象進行查詢,它可以有兩種表達方式:HQL語言或本地數據庫的SQL語句。Query經常被用來綁定查詢參數、限制查詢記錄數量,並最終執行查詢操作。

5、Criteria

Criteria接口與Query接口非常類似,允許創建並執行面向對象的標準化查詢。值得注意的是Criteria接口也是輕量級的,它不能在Session之外使用。

6、Configuration

Configuration 類的作用是對Hibernate 進行配置,以及對它進行啓動。在Hibernate 的啓動過程中,Configuration 類的實例首先定位映射文檔的位置,讀取這些配置,然後創建一個SessionFactory對象。雖然Configuration 類在整個Hibernate 項目中只扮演着一個很小的角色,但它是啓動hibernate 時所遇到的第一個對象。

七、版本

Hibernate版本更新速度很快,目前爲止有多個階段性的版本:Hibernate3Hibernate4Hibernate5,這一點程序員從其Jar文件名便可以看出來。目前最新發布的版本是Hibernate ORM 5.0.1.Final Released。

Hibernate2系列的最高版本是Hibernate2.1.8,Hibernate3系列的最高版本是hibernate-distribution-3.6.10.Final-dist版,但使用較多且較穩定的版本是Hibernate 3.1.3或Hibernate 3.1.2。

另外,自Hibernate3發佈以來,其產品線愈加成熟,相繼出現了Hibernate註釋、Hibernate實體管理器、Hibernate插件工具等一系列產品套件。在方便程序員使用Hibernate進行應用程序的開發的同時,也逐漸增強了Hibernate產品線的實力。

目前Hibernate已經出現了4.0已經5.0的版本



發佈了24 篇原創文章 · 獲贊 9 · 訪問量 5萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章