1. 程式人生 > >hibernate4之原理淺析

hibernate4之原理淺析

Hibernate是一個對JDBC輕量封裝後的輕量級ORMapping框架 

ORMapping原理(Object Relational Mapping) 

在以前使用的JDBC操作其實就是一個持久化的過程 
JDBC的劣勢: 
對於小型的應用開發而言,使用JDBC也許還不錯。但是對於大型應用而言,從上百張擁有幾十個欄位的資料表中讀取資料的話,就要寫很多getXXX()方法,所以JDBC在程式碼開發環節來講有高出錯率和低複用性。 
隨著Hibernate的日趨成熟,從易用性和高效性角度來講,JDBC在記錄的批量操作,多表連線,表單級聯方面表現並不優秀。 

ORMapping基本對應規則: 
1:類跟表相對應 
2:類的屬性跟表的欄位相對應 
3:類的例項與表中具體的一條記錄相對應 
4:一個類可以對應多個表,一個表也可以對應對個類 
5:DB中的表可以沒有主鍵,但是Object中必須設定主鍵欄位 
6:DB中表與表之間的關係(如:外來鍵)對映成為Object之間的關係 
7:Object中屬性的個數和名稱可以和表中定義的欄位個數和名稱不一樣 

Hibernate是怎麼工作的?
 
Hibernate主要用來實現Java物件和表之間的對映,除此之外還提供還提供資料查詢和獲取資料的方法,可以大幅度減少開發時人工使用SQL和JDBC處理資料的時間, Hibernate可以幫助你消除或者包裝那些針對特定廠商的SQL程式碼,並且幫你把結果集從表格式的表示形式轉換到一系列的物件去。 

整體流程 
1:通過configuration來讀cfg.xml檔案 
2:得到SessionFactory 工廠 
3:通過SessionFactory 工廠來建立Session例項 
4:通過Session開啟事務 
5:通過session的api操作資料庫 
6:事務提交 
7:關閉連線 




Hibernate4.1.4 API 簡介
 

Configuration類(org.hibernate.cfg.Configuration) 
負責配置和啟動Hibernate,建立SessionFactory例項 

SessionFactory介面(org.hibernate.SessionFactory) 
針對單個數據庫對映關係經過編譯後的記憶體映象,是執行緒安全的(不可變)。 它是生成Session的工廠,本身要用到ConnectionProvider,充當資料來源代理,一個SessionFactory對應一個數據源。 

Session介面(org.hibernate.Session) 
表示應用程式與持久儲存層之間互動操作的一個單執行緒物件,此介面物件生命週期很短,也是Transaction的工廠,負責CRUD的持久化操作,充當持久化管理器。約相當於JDBC的Connection+Statement/PreparedStatement的功能 

Transaction介面(org.hibernate.Transaction)
 
應用程式用來指定原子操作單元範圍的物件,它是單執行緒的,此介面生命週期很短。它通過抽象將應用從底層具體的JDBC、JTA以及CORBA事務隔離開。其實就是封裝了底層的事務。 

Query介面(org.hibernate.Query)、Criteria介面(org.hibernate.Criteria) 
執行資料庫查詢,是更加面向物件形式的方式,主要用於各種關聯和條件查詢。 


搭建 Hibernate4.1.4 工作環境 
把hibernate-release-4.1.4資料夾裡面lib/required資料夾下的jar包全部新增到工程的library裡面,另外還需新增slf4j的實現包slf4j-log4j12-1.6.4.jar和log4j的實現包log4j-1.2.16.jar,還有別忘了把JDBC的驅動jar包也加入到library裡面。 

配置hibernate.cfg.xml 
1:預設名稱為hibernate.cfg.xml 
2:存放在當前classes的根目錄下,開發的時候在src根下就可以了 
3:主要有如下四部分配置 : 
(1)與DB的連線 
(2)可選配置 
(3)資原始檔註冊 
(4)二級快取 
4:配置的時候可以到Hibernate發行包裡面找個hibernate.cfg.xml的例子,比如可以用“hibernate-release-4.1.4\project\etc”下面的hibernate.cfg.xml作例子,當需要配置快取的時候可以參考ehcache.xml檔案,還有Hibernate的屬性模版檔案,你們都是可選的屬性設定方法,另外該資料夾下的log4j.properties日誌檔案也可以用來參考 


下面是手動用java程式碼來啟動Hibernate4.1.4: 
啟動Hibernate其實就是建立一個SessionFatory,那麼就可以用SessionFactory創建出來的一個個Session物件進行對資料庫的持久化操作了。