全國(guó)咨詢(xún)/投訴熱線:400-618-4000

首頁(yè)技術(shù)文章正文

Hibernate的工作原理

更新時(shí)間:2018-09-18 來(lái)源:黑馬程序員JavaEE培訓(xùn)學(xué)院 瀏覽量:

1.Hibernate 的初始化. 

讀取Hibernate 的配置信息-〉創(chuàng)建SessionFactory 

1)創(chuàng)建Configeration類(lèi)的實(shí)例。 

它的構(gòu)造方法:將配置信息(Hibernate config.xml)讀入到內(nèi)存。 

一個(gè)Configeration 實(shí)例代表Hibernate 所有Java類(lèi)到Sql數(shù)據(jù)庫(kù)映射的集合。 

2)創(chuàng)建SessionFactory實(shí)例 

把Configeration 對(duì)象中的所有配置信息拷貝到SessionFactory的緩存中。

SessionFactory的實(shí)例代表一個(gè)數(shù)據(jù)庫(kù)存儲(chǔ)員源,創(chuàng)建后不再與Configeration 對(duì)象關(guān)聯(lián)。

緩存(cache):指Java對(duì)象的屬性(通常是一些集合類(lèi)型的屬性--占用內(nèi)存空間。 

SessionFactory的緩存中:Hibernate 配置信息。OR映射元數(shù)據(jù)。

緩存-大:重量級(jí)對(duì)象 小:輕量級(jí)對(duì)象 

3)調(diào)用SessionFactory創(chuàng)建Session的方法

1】用戶(hù)自行提供JDBC連接。 

   Connection con=dataSource.getConnection(); 

   Session s=sessionFactory.openSession(con); 

2】讓SessionFactory提供連接 

   Session s=sessionFactory.openSession(); 

4)通過(guò)Session 接口提供的各種方法來(lái)操縱數(shù)據(jù)庫(kù)訪問(wèn)。  

Hibernate 的緩存體系 

一級(jí)緩存: 

Session 有一個(gè)內(nèi)置的緩存,其中存放了被當(dāng)前工作單元加載的對(duì)象。 

每個(gè)Session 都有自己獨(dú)立的緩存,且只能被當(dāng)前工作單元訪問(wèn)。 

二級(jí)緩存: 

SessionFactory的外置的可插拔的緩存插件。其中的數(shù)據(jù)可被多個(gè)Session共享訪問(wèn)。

SessionFactory的內(nèi)置緩存:存放了映射元數(shù)據(jù),預(yù)定義的Sql語(yǔ)句。

Hibernate 中Java對(duì)象的狀態(tài)

1.臨時(shí)狀態(tài) (transient) 

特征: 

   1】不處于Session 緩存中 

   2】數(shù)據(jù)庫(kù)中沒(méi)有對(duì)象記錄 

Java如何進(jìn)入臨時(shí)狀態(tài) 

   1】通過(guò)new語(yǔ)句剛創(chuàng)建一個(gè)對(duì)象時(shí) 

   2】當(dāng)調(diào)用Session 的delete()方法,從Session緩存中刪除一個(gè)對(duì)象時(shí)。  

2.持久化狀態(tài)(persisted) 

特征: 

   1】處于Session 緩存中 

   2】持久化對(duì)象數(shù)據(jù)庫(kù)中設(shè)有對(duì)象記錄 

   3】Session 在特定時(shí)刻會(huì)保持二者同步 

Java如何進(jìn)入持久化狀態(tài) 

   1】Session 的save()把臨時(shí)-》持久化狀態(tài) 

   2】Session 的load(),get()方法返回的對(duì)象 

   3】Session 的find()返回的list集合中存放的對(duì)象 

   4】Session 的update(),saveOrupdate()使游離-》持久化 

3.游離狀態(tài)(detached) 

特征: 

   1】不再位于Session 緩存中 

   2】游離對(duì)象由持久化狀態(tài)轉(zhuǎn)變而來(lái),數(shù)據(jù)庫(kù)中可能還有對(duì)應(yīng)記錄。 

Java如何進(jìn)入持久化狀態(tài)-》游離狀態(tài) 

   1】Session 的close()方法

   2】Session 的evict()方法,從緩存中刪除一個(gè)對(duì)象。提高性能。少用。


本文版權(quán)歸黑馬程序員JavaEE學(xué)院所有,歡迎轉(zhuǎn)載,轉(zhuǎn)載請(qǐng)注明作者出處。謝謝!

作者:黑馬程序員JavaEE培訓(xùn)學(xué)院

首發(fā):http://java.itheima.com/


分享到:
在線咨詢(xún) 我要報(bào)名
和我們?cè)诰€交談!