亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

快速了解Hibernate中的Session

 更新時(shí)間:2017年12月11日 15:11:07   作者:飄走的我  
這篇文章主要介紹了快速了解Hibernate中的Session,具有一定借鑒價(jià)值,需要的朋友可以參考下。

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

session可以理解為一個(gè)可以操作數(shù)據(jù)庫(kù)的對(duì)象,該對(duì)象中有操作數(shù)據(jù)庫(kù)的方法。

在Java里面,緩存通常是指Java對(duì)象的屬性占用的內(nèi)存空間,通常是一些集合類型的屬性。在Session接口的實(shí)現(xiàn)類SessionImpl中定義了一系列的Java集合,這些Java集合就構(gòu)成了Session的緩存。

總的來(lái)說(shuō)(我對(duì)Session的理解):Session是Hibernate和DB的中間人(一個(gè)對(duì)象),Session中有兩塊東西或者說(shuō)是功能

(1)操作數(shù)據(jù)庫(kù)的方法

(2)Session中有一些屬性(集合之類的東西),通過(guò)這些屬性來(lái)存儲(chǔ)要發(fā)送給DB的sql語(yǔ)言、緩存從DB中已經(jīng)查出來(lái)的數(shù)據(jù)等

Session緩存

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

Session緩存的作用:

1)減少訪問(wèn)數(shù)據(jù)庫(kù)的頻率。

2)保證緩存中的對(duì)象與數(shù)據(jù)庫(kù)中的相關(guān)記錄保持同步。

Session清理緩存的時(shí)機(jī):

1)當(dāng)調(diào)用Transaction的commit()方法時(shí),commit()方法先清理緩存(前提是FlushMode.COMMIT/AUTO),然后再向數(shù)據(jù)庫(kù)提交事務(wù)。

2)當(dāng)應(yīng)用程序調(diào)用Session的find()或者iterate()時(shí),如果緩存中的持久化對(duì)象的屬性發(fā)生了變化,就會(huì)先清理緩存,以保證查詢結(jié)果能反映持久化對(duì)象的最新?tīng)顟B(tài)。

3)當(dāng)應(yīng)用程序顯示調(diào)用Session的flush()方法的時(shí)候。

Session清理模式執(zhí)行清理緩存操作的時(shí)間點(diǎn):

Session接口

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

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

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

-->計(jì)劃一條insert語(yǔ)句,把參數(shù)對(duì)象當(dāng)前的屬性值組裝到insert語(yǔ)句中,但是save()方法并不立即執(zhí)行SQLinsert語(yǔ)句,只有當(dāng)Session清理緩存時(shí)候才會(huì)執(zhí)行。

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

注意:save()方法是用來(lái)持久化一個(gè)臨時(shí)對(duì)象的!

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

如果將一個(gè)游離態(tài)對(duì)象傳給save()方法,session會(huì)將它當(dāng)作臨時(shí)對(duì)象來(lái)處理,再次向數(shù)據(jù)庫(kù)中插入一條記錄,不符合業(yè)務(wù)需求!

2.update():把Customer對(duì)象重新加入到Session緩存中,使之變?yōu)槌志没瘜?duì)象。

--->計(jì)劃一條update語(yǔ)句,只有在清理緩存的時(shí)候才會(huì)執(zhí)行,并且在執(zhí)行的時(shí)候才會(huì)把參數(shù)對(duì)象中的屬性值組裝到update語(yǔ)句中。

注意:update()是將一個(gè)游離對(duì)象轉(zhuǎn)變?yōu)槌志没瘜?duì)象的。

只要通過(guò)update()方法使游離對(duì)象被一個(gè)session關(guān)聯(lián),即使沒(méi)有修改參數(shù)對(duì)象的任何屬性,Session在清理緩存的時(shí)候也會(huì)執(zhí)行由update方法計(jì)劃的Update語(yǔ)句。

3.saveOrUpdate():同時(shí)包含了save()與update()方法的功能,如果傳入的參數(shù)是臨時(shí)對(duì)象,調(diào)用save方法,如果參入?yún)?shù)是游離對(duì)象,調(diào)用update()方法,如果傳入的是持久化對(duì)象,直接返回。

4.load()/get():都會(huì)根據(jù)給定的OID從數(shù)據(jù)庫(kù)中加載一個(gè)持久化對(duì)象,區(qū)別在于,當(dāng)數(shù)據(jù)庫(kù)中不存在與OID對(duì)應(yīng)的記錄時(shí),load()方法會(huì)拋出ObjectNotFoundException異常,而get()方法返回null.

5.delete():用于從數(shù)據(jù)庫(kù)中刪除與參數(shù)對(duì)象對(duì)應(yīng)的記錄,如果傳入的參數(shù)是持久化對(duì)象,Session就計(jì)劃執(zhí)行一個(gè)delete語(yǔ)句,如果傳入的參數(shù)是游離對(duì)象,先使游離對(duì)象被Session關(guān)聯(lián),使它變?yōu)槌志没瘜?duì)象,然后計(jì)劃一個(gè)delete語(yǔ)句,在清理緩存的時(shí)候執(zhí)行。

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

適用場(chǎng)合:不希望Session繼續(xù)按照該對(duì)象的狀態(tài)改變來(lái)同步更新數(shù)據(jù)庫(kù)。

在批量更新或批量刪除的場(chǎng)合,當(dāng)更新或者刪除一個(gè)對(duì)象后,及時(shí)釋放該對(duì)象占用的內(nèi)存。當(dāng)然批量操作優(yōu)先考慮JDBC.

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

總結(jié)

以上就是快速了解Hibernate中的Session的全部?jī)?nèi)容,希望對(duì)大家有所幫助。感興趣的朋友可以繼續(xù)參閱本站其他相關(guān)專題。如有不足之處,歡迎留言指出。感謝朋友們對(duì)本站的支持!

相關(guān)文章

  • Java?ObjectMapper的使用和使用過(guò)程中遇到的問(wèn)題

    Java?ObjectMapper的使用和使用過(guò)程中遇到的問(wèn)題

    在Java開(kāi)發(fā)中,ObjectMapper是Jackson庫(kù)的核心類,用于將Java對(duì)象序列化為JSON字符串,或者將JSON字符串反序列化為Java對(duì)象,這篇文章主要介紹了Java?ObjectMapper的使用和使用過(guò)程中遇到的問(wèn)題,需要的朋友可以參考下
    2024-07-07
  • Java日常練習(xí)題,每天進(jìn)步一點(diǎn)點(diǎn)(2)

    Java日常練習(xí)題,每天進(jìn)步一點(diǎn)點(diǎn)(2)

    下面小編就為大家?guī)?lái)一篇Java基礎(chǔ)的幾道練習(xí)題(分享)。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧,希望可以幫到你
    2021-07-07
  • 詳解Java使用JMH進(jìn)行基準(zhǔn)性能測(cè)試

    詳解Java使用JMH進(jìn)行基準(zhǔn)性能測(cè)試

    本文主要介紹了Java使用JMH進(jìn)行基準(zhǔn)性能測(cè)試,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-11-11
  • 從面試中的問(wèn)題分析ThreadLocal

    從面試中的問(wèn)題分析ThreadLocal

    這篇文章主要介紹了從面試中的問(wèn)題分析ThreadLocal,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,下面我們來(lái)一起學(xué)習(xí)一下吧
    2019-06-06
  • Java獲取指定字符串出現(xiàn)次數(shù)的方法

    Java獲取指定字符串出現(xiàn)次數(shù)的方法

    這篇文章主要為大家詳細(xì)介紹了Java獲取指定字符串出現(xiàn)次數(shù)的方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-12-12
  • Java繼承與多態(tài)的正確打開(kāi)方式

    Java繼承與多態(tài)的正確打開(kāi)方式

    這篇文章主要為大家介紹了Java的繼承與多態(tài),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來(lái)幫助
    2022-01-01
  • java學(xué)習(xí)之路_篇超好的文章

    java學(xué)習(xí)之路_篇超好的文章

    一篇超好的文章!就看你有沒(méi)耐心看!java學(xué)習(xí)之路!
    2008-10-10
  • 解決Eclipse/STS中出現(xiàn)Resource is out of sync with the file system的異常問(wèn)題

    解決Eclipse/STS中出現(xiàn)Resource is out of sync with the file system

    今天小編就為大家分享一篇關(guān)于解決Eclipse/STS中出現(xiàn)Resource is out of sync with the file system的異常問(wèn)題,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧
    2018-12-12
  • SpringCloud集成Hystrix熔斷過(guò)程分步分解

    SpringCloud集成Hystrix熔斷過(guò)程分步分解

    通過(guò)hystrix可以解決雪崩效應(yīng)問(wèn)題,它提供了資源隔離、降級(jí)機(jī)制、融斷、緩存等功能。接下來(lái)通過(guò)本文給大家分享SpringCloud集成Hystrix熔斷,感興趣的朋友一起看看吧
    2022-09-09
  • 這一次搞懂Spring事務(wù)注解的解析方式

    這一次搞懂Spring事務(wù)注解的解析方式

    這篇文章主要介紹了這一次搞懂Spring事務(wù)注解的解析方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-08-08

最新評(píng)論