1. 程式人生 > >淺析SSH核心原理(二)

淺析SSH核心原理(二)

Hibernate是一個開放原始碼的ORM(物件-關係對映)框架,它對JDBC進行了非常輕量級的物件封裝,使得Java程式設計師可以隨心所欲的使用物件程式設計思維來操縱資料庫。 Hibernate可以應用在任何使用JDBC的場合,既可以在Java的客戶端程式使用,也可以在Servlet/JSP的Web應用中使用,最具革命 意義的是,Hibernate可以在應用EJB的J2EE架構中取代CMP,完成資料持久化的重任。 一、既然Hibernate是ORM的框架,說Hibernate,就不得不說ORM,那麼什麼是ORM? 物件-關係對映(Object/Relation Mapping,簡稱ORM),是隨著面向物件的軟體開發方法發展而產生的,是一種為了解決面向物件與關係資料庫存在的互不匹配的現象的技術,本質上就是將資料從一種形式轉換到另外一種形式。 在弄明白ORM之前,要先明白以下三個概念: 1、概念模型:在軟體分析階段建立,用來模擬問題域中每一個真實實體的概念和屬性,以及這些實體之間的關係。 2、域模型:在軟體設計階段建立,基於概念模型,域模型是面向物件的,由具有狀態和行為的域物件(實體的抽象,類)和域物件之間的關係(類間關係)組成。 3、關係資料模型:在概念模型的基礎上建立起來,描述關係資料的靜態結構。 由上面的概念,我們知道,域模型和關係資料模型分別建立在概念模型的基礎上,域模型是面向物件的,而關係資料模型是面向關係的,一般情況下,一個持久化類和一個表對應,類的每個例項對應表中的一條記錄。很顯然,兩種模型之間有許多不匹配之處,如下圖:
ORM就是為了解決域模型和關係資料模型之間的不匹配而產生的,所以叫物件-關係對映,ORM能在任何一個java應用的業務邏輯層和資料庫層之間充當橋樑,如下圖: Hibernate就是一種ORM實現,說白了就是一個ORM中介軟體。 參考我的部落格上另外一個系列文章來看一下Hibernate是如何實現ORM的。 http://blog.csdn.net/shan9liang/article/details/8746961 二、Hibernate核心API 1、Configuration介面 Configuration類負責配置並啟動Hibernate,建立SessionFactory物件。在Hibernate的啟動的過程中,Configuration類的例項首先定位對映文件位置、讀取配置,然後建立SessionFactory物件。 2、SessionFactory介面
一個SessionFactory例項對應一個數據源,並負責建立Session物件。這裡用到了工廠模式。需要注意的是SessionFactory並不是輕量級的,因為它需要很大的快取存放預定義的Sql語句及對映元資料等,可以為SessionFactory配置一個快取外掛,即二級快取。一般情況下,一個專案通常只需要一個SessionFactory就夠,當需要操作多個數據庫時,可以為每個資料庫指定一個SessionFactory。SessionFactory是執行緒安全的。 3、Session介面 Session介面負責執行被持久化物件的CRUD操作。但需要注意的是Session物件是非執行緒安全的。Session也有一個快取,成為一級快取,快取當前工作單位的資料。 4、Transaction介面
Transaction介面負責事務相關的操作,它對底層的事務介面做了封裝,使得應用可以通過一致的Transaction介面宣告事務邊界,如下圖: 它是可選的,開發人員也可以設計編寫自己的底層事務處理程式碼、 5、Query和Criteria介面 Query和Criteria介面負責執行各種資料庫查詢,Query例項包裝了一個HQL查詢語句,與普通Sql的區別是,HQL查詢語句是面向物件的。 Criteria介面完全封裝了基於字串形式的查詢語句,比Query介面更加面向物件,Criteria介面擅長執行動態查詢。 Hibernate當然不僅僅這幾個核心介面,還有事件處理介面,當程式通過Hibernate來載入,儲存,更新或刪除物件時,會觸發Hibernate的攔截器或事件監聽器做出相應的處理。 還有對映型別介面等等,不再過多介紹。 核心介面說完了,那麼這些介面經過怎樣的合作來完成一個Hibernate的基本執行流程呢?示意圖: 三、本篇總結 本篇主要介紹了ORM對映以及Hibernate核心API,並用活動圖表示了Hibernate一般操作的基本處理流程。 下篇繼續……