最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

快速了解Hibernate中的Session

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

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

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

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

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

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

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

Session緩存

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

Session緩存的作用:

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

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

Session清理緩存的時機:

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

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

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

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

Session接口

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

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

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

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

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

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

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

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

2.update():把Customer對象重新加入到Session緩存中,使之變?yōu)槌志没瘜ο蟆?/p>

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

注意:update()是將一個游離對象轉變?yōu)槌志没瘜ο蟮摹?/p>

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

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

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

5.delete():用于從數(shù)據(jù)庫中刪除與參數(shù)對象對應的記錄,如果傳入的參數(shù)是持久化對象,Session就計劃執(zhí)行一個delete語句,如果傳入的參數(shù)是游離對象,先使游離對象被Session關聯(lián),使它變?yōu)槌志没瘜ο螅缓笥媱澮粋€delete語句,在清理緩存的時候執(zhí)行。

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

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

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

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

總結

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

相關文章

  • Java 守護線程_動力節(jié)點Java學院整理

    Java 守護線程_動力節(jié)點Java學院整理

    Java語言機制是構建在JVM的基礎之上的,意思是Java平臺把操作系統(tǒng)的底層給屏蔽起來,所以它可以在它自己的虛擬的平臺里面構造出對自己有利的機制,而語言或者說平臺的設計者多多少少是收到Unix思想的影響,而守護線程機制又是對JVM這樣的平臺湊合,于是守護線程應運而生
    2017-05-05
  • 新手小白入門必學JAVA面向對象之多態(tài)

    新手小白入門必學JAVA面向對象之多態(tài)

    說到多態(tài),一定離不開其它兩大特性:封裝和繼承,下面這篇文章主要給大家介紹了關于新手小白入門必學JAVA面向對象之多態(tài)的相關資料,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下
    2022-02-02
  • mybatis-plus分頁查詢三種方法小結

    mybatis-plus分頁查詢三種方法小結

    本文主要介紹了mybatis-plus分頁查詢三種方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-05-05
  • Java中分割字符串的兩種方法實例詳解

    Java中分割字符串的兩種方法實例詳解

    這篇文章主要介紹了Java中分割字符串的兩種方法,一種是java.lang.String 的 split() 方法,,另外一種是用String Tokenizer類。文中的每種方法都給出了詳細的示例代碼,相信對大家的理解和學習具有一定的參考借鑒價值,有需要的朋友們下面來一起看看吧。
    2016-12-12
  • Java多線程中的wait與notify方法詳解

    Java多線程中的wait與notify方法詳解

    這篇文章主要介紹了Java多線程中的wait與notify方法詳解,線程的調度是無序的,但有些情況要求線程的執(zhí)行是有序的,因此,我們可以使用 wait() 方法來使線程執(zhí)行有序,需要的朋友可以參考下
    2023-08-08
  • 給Java菜鳥的一些建議_關于Java知識點歸納(J2EE and Web 部分)

    給Java菜鳥的一些建議_關于Java知識點歸納(J2EE and Web 部分)

    下面小編就為大家?guī)硪黄oJava菜鳥的一些建議_關于Java知識點歸納(J2EE and Web 部分)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-05-05
  • 解決mybatis-plus通用mapper調用報錯:Invalid bound statement

    解決mybatis-plus通用mapper調用報錯:Invalid bound statement

    這篇文章主要介紹了解決mybatis-plus通用mapper調用報錯:Invalid bound statement的問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-09-09
  • SpringBoot中的@ControllerAdvice使用方法詳細解析

    SpringBoot中的@ControllerAdvice使用方法詳細解析

    這篇文章主要介紹了SpringBoot中的@ControllerAdvice使用方法詳細解析, 加了@ControllerAdvice的類為那些聲明了@ExceptionHandler、@InitBinder或@ModelAttribute注解修飾的 方法的類而提供的專業(yè)化的@Component,以供多個 Controller類所共享,需要的朋友可以參考下
    2024-01-01
  • ArrayList集合初始化及擴容方式

    ArrayList集合初始化及擴容方式

    這篇文章主要介紹了關于ArrayList集合初始化及擴容方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-03-03
  • MyBatis-Plus?條件查詢器的實現(xiàn)

    MyBatis-Plus?條件查詢器的實現(xiàn)

    本文主要介紹了MyBatis-Plus?條件查詢器的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2022-07-07

最新評論

临安市| 沧州市| 临澧县| 永泰县| 定安县| 息烽县| 祁东县| 申扎县| 松滋市| 曲靖市| 阿图什市| 台南县| 贺兰县| 儋州市| 襄垣县| 措美县| 郁南县| 开化县| 朝阳区| 神农架林区| 开鲁县| 拉孜县| 峨边| 竹溪县| 南木林县| 开江县| 扎兰屯市| 满洲里市| 柘荣县| 夏河县| 漳浦县| 海原县| 红河县| 讷河市| 永川市| 苏尼特左旗| 马关县| 雅安市| 新田县| 重庆市| 彩票|