91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Hibernate中Session的作用是什么

發布時間:2021-01-13 16:44:43 來源:億速云 閱讀:378 作者:Leah 欄目:編程語言

這篇文章給大家介紹Hibernate中Session的作用是什么,內容非常詳細,感興趣的小伙伴們可以參考借鑒,希望對大家能有所幫助。

Hibernate中的Session是一級緩存,可以理解為進程級(是線程吧)的緩存,在進程(是線程吧)運行期間一直存在。

session可以理解為一個可以操作數據庫的對象,該對象中有操作數據庫的方法。

在Java里面,緩存通常是指Java對象的屬性占用的內存空間,通常是一些集合類型的屬性。在Session接口的實現類SessionImpl中定義了一系列的Java集合,這些Java集合就構成了Session的緩存。

總的來說(我對Session的理解):Session是Hibernate和DB的中間人(一個對象),Session中有兩塊東西或者說是功能

(1)操作數據庫的方法

(2)Session中有一些屬性(集合之類的東西),通過這些屬性來存儲要發送給DB的sql語言、緩存從DB中已經查出來的數據等

Session緩存

session緩存是由一系列的Java集合構成的。當一個對象被加入到Session緩存中,這個對象的引用就加入到了java的集合中,以后即使應用程序中的引用變量不再引用該對象,只要Session緩存不被清空,這個對象一直處于生命周期中。

Session緩存的作用:

1)減少訪問數據庫的頻率。

2)保證緩存中的對象與數據庫中的相關記錄保持同步。

Session清理緩存的時機:

1)當調用Transaction的commit()方法時,commit()方法先清理緩存(前提是FlushMode.COMMIT/AUTO),然后再向數據庫提交事務。

2)當應用程序調用Session的find()或者iterate()時,如果緩存中的持久化對象的屬性發生了變化,就會先清理緩存,以保證查詢結果能反映持久化對象的最新狀態。

3)當應用程序顯示調用Session的flush()方法的時候。

Session清理模式執行清理緩存操作的時間點:

Hibernate中Session的作用是什么

Session接口

Session接口是Hibernate向應用程序提供的操縱數據庫的最主要的接口,它提供了基本的保存,更新,刪除和查詢的方法。

1.save():把一個臨時對象加入到緩存中,是它變成持久化對象

-->選用映射文件指定的主鍵生成器為持久化對象分配唯一的OID

-->計劃一條insert語句,把參數對象當前的屬性值組裝到insert語句中,但是save()方法并不立即執行SQLinsert語句,只有當Session清理緩存時候才會執行。

-->如果在save()方法之后,又修改了持久化對象的屬性,會使得Session在清理緩存的時候額外執行SQLupdate語句。

注意:save()方法是用來持久化一個臨時對象的!

如果將一個持久化對象傳給save()方法將不會執行任何操作,多余的步驟

如果將一個游離態對象傳給save()方法,session會將它當作臨時對象來處理,再次向數據庫中插入一條記錄,不符合業務需求!

2.update():把Customer對象重新加入到Session緩存中,使之變為持久化對象。

--->計劃一條update語句,只有在清理緩存的時候才會執行,并且在執行的時候才會把參數對象中的屬性值組裝到update語句中。

注意:update()是將一個游離對象轉變為持久化對象的。

只要通過update()方法使游離對象被一個session關聯,即使沒有修改參數對象的任何屬性,Session在清理緩存的時候也會執行由update方法計劃的Update語句。

3.saveOrUpdate():同時包含了save()與update()方法的功能,如果傳入的參數是臨時對象,調用save方法,如果參入參數是游離對象,調用update()方法,如果傳入的是持久化對象,直接返回。

4.load()/get():都會根據給定的OID從數據庫中加載一個持久化對象,區別在于,當數據庫中不存在與OID對應的記錄時,load()方法會拋出ObjectNotFoundException異常,而get()方法返回null.

5.delete():用于從數據庫中刪除與參數對象對應的記錄,如果傳入的參數是持久化對象,Session就計劃執行一個delete語句,如果傳入的參數是游離對象,先使游離對象被Session關聯,使它變為持久化對象,然后計劃一個delete語句,在清理緩存的時候執行。

6.evict():從緩存中清除參數指定的持久化對象。

適用場合:不希望Session繼續按照該對象的狀態改變來同步更新數據庫。

在批量更新或批量刪除的場合,當更新或者刪除一個對象后,及時釋放該對象占用的內存。當然批量操作優先考慮JDBC.

7.clear():清空緩存中所有持久化對象。

關于Hibernate中Session的作用是什么就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

彝良县| 信宜市| 元谋县| 吉水县| 三明市| 汝州市| 万荣县| 绥江县| 墨脱县| 长泰县| 昌图县| 区。| 鹰潭市| 惠安县| 凤冈县| 含山县| 云林县| 资溪县| 东安县| 昌江| 伊金霍洛旗| 平远县| 尉犁县| 木里| 古浪县| 苗栗市| 康马县| 八宿县| 安多县| 江油市| 博罗县| 东至县| 潞城市| 竹北市| 柳江县| 盱眙县| 文安县| 巴中市| 修武县| 安西县| 德安县|