Hibernate框架—簡介


ORM對象/關系數據庫映射

ORM全稱Object/Relation Mapping,對象/關系數據庫映射,可以理解成一種規范。該框架的基本特征:完成面向對象的編程語言到關系數據庫之間的映射。

ORM關系型數據庫包裝成面向對象的模型。

ORM框架由 實體+XML配置文件(如下圖所示)

 

 

基本映射方式:有三種

數據庫表映射類:持久化類被映射到一個數據表 ,當使用一個持久類來創建實例,修改實例屬性,刪除實例時,系統自動回轉換對這個表進行CRUD操作。

數據表的行映射對象(實例):持久化類會生成很多實例,每個實例就對應數據表中的一個特定行的操作。每個持久化對象對應數據表的一行記錄。

數據表中的列映射對象的屬性:當在應用中修改某個持久化對象的指定屬性時(持久化實例映射到數據行)

ORM將會轉換成對對應數據表中指定數據行、指定列的操作。

About hibernate:

 

hibernate就是一個ORM框架的典型代表。

 

①hibernate是輕量級JavaEE應用的一個持久層框架。它的作用在於管理Java實體類到數據庫表之間的映射關系,並且提供數據查詢和獲取數據的方法,可以大幅度的縮短使用JDBC處理數據持久化的時間。

②hibernate完成了對象模型和基於SQL關系模型的映射關系,使得程序員可以采用面向對象的方式來開發程序,充當了兩者之間的橋梁。

 

③Hibernate是一個面向JAVA環境的對象/關系數據庫映射工具,用來把對象模型表示的對象映射到基於SQL的關系模型數據結構中去 ,Hibernate的目標主要是為了釋放開發者通常的數據持久化相關的編程的繁重任務。

 

對於以數據為中心的程序而言,往往在數據庫中使用存儲過程實現商業邏輯,Hibernate可能不是最好的解決方案,但是對於那些基於JAVA的中間件應用,設計采用面向對象的業務邏輯和商業邏輯,Hibernate是最有用的。

 

④Hibernate不僅僅管理JAVA類到數據庫表的映射,還提供數據查詢和獲取數據的辦法,可以大幅度減少開發時人員使用SQL和JDBC處理數據的時間。

對比一些框架的優缺點:

 

Hibernate 主要特點:

1、 開源和免費的License,方便需要時研究源碼,改寫源代碼,進行功能定制。

2、 輕量級封裝,避免引入過多復雜的問題,調試容易,減輕程序員負擔。

3、 有可擴展性,API開放,功能不夠用時,自己可以編碼擴展。

 

Hibernate的持久化解決方案將用戶從原始的JDBC訪問中釋放出來,用戶無須再關注底層的JDBC的操作。而是以面向對象的方式進行持久層操作。底層數據連接的獲得,數據訪問的實現,事務控制都無須用戶關心。將應用從底層的JDBC中抽象出來,通過配置文件管理底層的JDBC連接,讓Hibernate解決持久化訪問的實現。

簡單工作原理:

分析:

1、Hibernate框架需要2種配置文件,分別是:hibernate.cfg.xml(存放數據庫連接信息)與xxx.hbm.xml

2、xxx.hbm.xml是配置在hibernate.cfg.xml中,該文件確定了持久類與數據表,數據列之間的對應關系。

3、hibernate不再是直接調用JDBC訪問,而是Session會話訪問。在hibernate框架中,只有處於Seesion管理下的POJO對象才有持久化操作的能力。

體系架構:

幾個關鍵對象:

 

SessionFatory:hibernate關鍵對象,它是單個數據庫映射關系經過編譯后的內存鏡像,線程安全。主要作用是生成Session的工廠,該對象可以為事務之間可重用的數據提供可選的二級緩存。

 

Session:它是應用程序與持久儲存層之間交互操作的一個單線程對象,是hibernate持久化操作的關鍵對象,所有的持久化對象必須在Session管理下才可以進行持久化操作。此對象的生命周期極短,底層封裝了JDBC連接。Session對象持有一個必選的一級緩存,顯式執行flush()之前,所有持久化操作的數據都緩存在Session對象處。

 

持久化對象:系統創建的POJO實例,一旦與特定的Session關聯,並對應數據表的指定記錄,該對象就處於持久化狀態,這一系列對象都被稱為持久化對象。在程序中對持久化對象執行的修改,都將自動被轉換為持久層的修改。持久化對象完全可以是普通的JavaBean,唯一特殊的是他們正與一個Session關聯。

 

事務(transaction):具有數據庫事務的概念,Hibernate事務是對底層具體的JDBC、JTA、以及CORBA事務的抽象,在某些情況下,一個Transaction之內可能包含多個Session對象。雖然事務操作是可選的,但所有持久化操作都應該在事務管理下進行,即便是只讀操作。

 

連接提供者(ConnctionProvider):生成JDBC連接的工廠,通過抽象將應用程序與底層的DataSource或DriverManager隔離開,該對象無須應用程序直接訪問,僅在應用程序需要擴展時使用。注:實際開發中,很少有采用DriverManager來獲取數據庫連接, 通常都會使用DataSource來獲取數據庫連接。

 

事務工廠(TransactionFactory):是生成Transaction對象實例的工廠,該對象無須應用程序直接訪問,它負責對底層具體的事務實現進行封裝、將底層具體的事務抽象成Hibernate事務。

JAVA對象的三種形態

瞬時狀態,持久化狀態與游離狀態。

 

瞬態:對象由new操作符創建,且尚未與Hibernate Session關聯的對象,被認為處於瞬態。瞬態對象不會被持久化到數據庫中,也不會被賦予持久化標示,如果程序中失去了瞬態對象的引用,瞬態對象將被垃圾回收機制銷毀。使用Hibernate session可以讓其變為持久化狀態。

持久化:持久化實例在數據庫中有對應的記錄,並擁有一個持久化標識(identifier),持久化的實例可以是剛保存的。也可以是剛被加載的。無論那種,持久化對象都必須與指定的Hibernate Session關聯。Hibernate會檢測到處於持久化狀態對象的改動,在當前操作執行完成時將對象數據寫回數據庫。開發者不需要手動執行UPDATE。

游離:某個實例曾經處於持久化狀態,但隨着與之關聯的session被關閉,該對象就變成游離狀態了。游離對象的引用依舊有效,對象可以繼續被修改,只是不會同步到數據庫中。如果重新讓游離對象與某個session關聯,該對象會重新轉換為持久化狀態。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM