什麼是Hibernate??? Hibernate是一個開放源代碼的對象關係映射框架,它對JDBC進行了非常輕量級的對象封裝,它將POJO與資料庫表建立映射關係,是一個全自動的orm框架,hibernate可以自動生成SQL語句,自動執行,使得Java程式員可以隨心所欲的使用對象編程思維來操縱資料庫 ...
======什麼是Hibernate???======
Hibernate是一個開放源代碼的對象關係映射框架,它對JDBC進行了非常輕量級的對象封裝,它將POJO與資料庫表建立映射關係,是一個全自動的orm框架,hibernate可以自動生成SQL語句,自動執行,使得Java程式員可以隨心所欲的使用對象編程思維來操縱資料庫。 Hibernate可以應用在任何使用JDBC的場合,既可以在Java的客戶端程式使用,也可以在Servlet/JSP的Web應用中使用,最具革命意義的是,Hibernate可以在應用EJB的J2EE架構中取代CMP,完成數據持久化的重任。——《百度百科》
1.Hibernate 是一個開源框架,與 Struts 這種 MVC(Model-View-Controller) 框架不同的是,Hibernate 是一種 ORM(Object/Relational Mapping) 框架。
2.ORM 意為對象關係映射,因此 Hibernate 會在 Java 對象和關係資料庫之間建立某種映射,以達到存取 Java 對象的目的,是實現持久化存儲(將記憶體中的數據存儲在關係型的資料庫、磁碟文件、XML數據文件中等等)的一種解決方案。
*******************普及一下ORM**************************************
-ORM(Object/Relation Mapping):對象/關係映射
*ORM主要解決對象~關係的映射
*ORM的思想:將關係資料庫中的記錄映射成為對象,以對象的形式展示,程式員可以把對資料庫的操作轉化為對對象的操作。
*ORM採用元數據來描述對象~關係映射細節,元數據通常採用XML格式,並且放在專門的對象~關係映射文件中。
3.Hibernate 不僅管理 Java 類到資料庫表的映射(包括從 Java 數據類型到 SQL 數據類型的映射),還提供數據查詢和獲取數據的方法,可以大幅度減少開發時人工使用 SQL 和 JDBC 處理數據的時間。這正是它的設計目標,即將軟體開發人員從大量相同的數據持久層相關編程工作中解放出來。
======Hibernate體繫結構======
~簡要的 Hibernate 整體體繫結構大致圖~
從上圖可以看出,Hibernate 使用資料庫(Database)和配置信息(hibernate.properties 等)來為應用程式提供持久化服務(以及持久的對象 Persistent Objects)。
我們再來看看 Hibernate 運行時的體繫結構。由於Hibernate非常靈活,且支持多種應用方案, 所以這裡我們只描述一下兩種極端的情況。
- “輕型”的體繫結構方案
要求應用程式提供自己的 JDBC 連接並管理自己的事務。這種方案使用了 Hibernate API 的最小子集:
- “全面解決”的體繫結構方案
將應用層從底層的 JDBC/JTA API 中抽象出來,而讓 Hibernate 來處理這些細節:
======基本 APIs=======
-
SessionFactory
(org.hibernate.SessionFactory)
對於單個資料庫映射關係經過編譯後的記憶體緩存,它是線程安全且不可變的。是 Session 生成的工廠實例,也是 ConnectionProvider 的一個客戶端(會用到 ConnectionProvider)。它在進程或集群的級別上,為那些在事務之前可重覆使用的數據提供了選擇性的二級緩存。
- Session(org.hibernate.Session)
提供應用程式和持久化存儲介質之間的一個單線程的會話對象,此對象生存期很短。它隱藏了 JDBC 連接,也是 Transaction 的工廠實例。對於應用的持久化對象及其集合,它提供了一個一級緩存;當遍歷導航對象圖或者根據持久化標識查找對象時,會用到這個一級緩存。
- 持久化的對象及其集合
具有持久化狀態和業務功能的單線程對象,同樣生存期很短。這些對象可能是普通的 JavaBeans/POJOs(Plain Ordinary Java Object),它們只能與一個 Session 相關聯。一旦 Session 被關閉,它們就會脫離持久化狀態,並且可以被應用程式的任何層使用(比如跟表示層打交道的 data transfer objects)
-
瞬態(transient)、脫管
狀態(detached)的對象及其集合
持久化的類目前沒有和 Session 相關聯的實例。他們可能是因為在被應用實例化後還沒有被持久化,也可能是由於實例化它們的 Session 對象已經被關閉,從而脫離了持久化狀態。
-
事務(Transaction)
(org.hibernate.Transaction)
(可選的)它是應用程式用來指定原子操作單元範圍的對象,是一個單線程的、短生存周期的對象。它使用抽象把應用從底層的 JDBC、JTA 以及 CORBA 事務中隔離開。在某些情況下,一個 Session 可能涵蓋多個 Transactions 對象。儘管使用該對象是可選的,但事務的劃分(無論是使用底層的 API 還是使用 Transaction 對象)都是不可選的。
-
ConnectionProvider
(org.hibernate.connection.ConnectionProvider)
(可選的)JDBC 連接的工廠和連接池。它通過抽象把應用從底層的 DataSource 或者 DriverManager 隔離開。這並不開放給應用程式使用,但對開發者而言是可以擴展或實現的。
-
TransactionFactory
(org.hibernate.TransactionFactory)
(可選的)生成 Transaction 對象實例的工廠。僅供開發者擴展/實現用,並不開放給應用程式使用。
- 擴展介面(Extension Interfaces)
Hibernate 提供了很多可選的擴展介面,你可以通過實現它們來定製你的持久層的行為。
======Hibernate優點======
a、封裝了jdbc,簡化了很多重覆性代碼。
b、簡化了DAO層編碼工作,使開發更對象化了。
c、移植性好,支持各種資料庫,如果換個資料庫只要在配置文件中變換配置就可以了,不用改變hibernate代碼。
d、支持透明持久化,因為hibernate操作的是純粹的(pojo)java類,沒有實現任何介面,沒有侵入性。所以說它是一個輕量級框架。
e、它支持各種關係資料庫,從 一對一
到 多對多
的各種複雜關係。
--------------------------------------------------------------------------------------------------------------------------------------來自尼瑪星球的光軍/QQ:383996901