多多色-多人伦交性欧美在线观看-多人伦精品一区二区三区视频-多色视频-免费黄色视屏网站-免费黄色在线

國內最全IT社區平臺 聯系我們 | 收藏本站
阿里云優惠2
您當前位置:首頁 > php框架 > 框架設計 > 【Java基礎】Hibernate的緩存機制以及延遲加載

【Java基礎】Hibernate的緩存機制以及延遲加載

來源:程序員人生   發布時間:2015-05-05 07:41:30 閱讀次數:3982次

    上篇博客介紹了Hibernate的基本原理,在博客尾聲的時候提到了Hibernate的緩存機制和延遲加載問題,這篇博客我們繼續,將這兩部份的內容補充完。


    首先說說Hibernate的緩存機制,我們都知道Hiernate有1級緩存、2級緩存,但是具體的機制原理了解的清楚嗎?這里我們就來好好說說Hibernate的緩存機制。先說說為何要用緩存機制?Hibernate是1個持久層框架,常常訪問物理數據庫,為了下降利用程序對數據源訪問的頻次,從而提高利用程度的運行性能。緩存內的數據是對物理數據源中的數據的復制,利用程序在運行時從緩存中讀寫數據,在特定時間或事件中的會同步緩存和物理數據源的數據。


    介紹完Hibernate緩存的作用,下面說說Hibernate緩存的分類了其實我們上面都說了,Hibernate緩存分為1級緩存和2級緩存。Hibernate的1級緩存 又稱為“Session的緩存”,它是內置的,不能被卸載,這里面的不能卸載的意識是這類緩存不具有可選性,是必須有的功能,是不能被取消的。由于Session對象的生命周期通常對應1個數據庫事務或1個利用事務,因此它的緩存是事務范圍內的緩存。1級緩存是必須的,不允許而且事實上也沒法卸除。在1級緩存中,持久化類的每個實例都具有唯1的OID。下面說2級緩存,Hibernate的2級緩存又稱為“SessionFactory的緩存”,由于SessionFactory對象的生命周期和利用程序的全部進程對應,因此Hibernate的2級緩存是進程范圍或集群范圍的緩存。有可能出現并提問題,因此需要采取適當的并發訪問策略,該策略為被緩存的數據提供了事務隔離級別,2級緩存是可選的,相對1級緩存而言它是1個可配置的插件,在默許情況下,SessionFactory不會啟用這個插件。


    那末甚么樣的數據合適存在2級緩存中呢?第1、很少被修改的數據;第2、不是很重要的數據,允許出現偶爾并發的數據;第3、不會被并發訪問的數據;第4、常量的數據。那末相對而言甚么樣的數據不合適寄存在2級緩存中呢?第1、常常被修改的數據;第2、絕對不允許出現并發訪問的數據,如財務數據;第3、與其他利用程序同享的數據。


    那末具體是如何利用緩存機制的呢?我們來舉個例子,比如說當Hibernate根據ID訪問數據對象的時候,它會首先從Session1級緩存中去查,如果查不到,如果配置了2級緩存,就去2級緩存中去查;如果還查不到,那末就去數據庫中查,把結果依照ID放入到緩存中。刪除、更新、增加數據的時候,同時更新緩存。


    好了,Hibernate的緩存機制就介紹了到這里,下面我們說說Hibernate的延遲加載。Hibernate的延遲加載是非常經常使用的技術。先說延遲加載的概念,延遲加載時只有真正使用該對象時才會創建,對Hibernate而言,它是支持延遲加載的,也稱為懶加載,是在真正使用對象的時候才會發送sql語句,查詢對象的時候不會發送sql語句。Hibernate通過這類延遲加載開下降系統的內存開消,從而保證Hibernate的運行性能。


    Hibernate主要聽過代理Proxy機制來實現延遲加載,具體的進程是Hibernate從數據庫中獲得某1個對象數據或某1個對象的集合屬性值或獲得某1個對象所關聯的另外一個對象時,由于沒有使用該對象的數據,Hibernate其實不是從數據庫加載真實的數據,而只是為該對象創建1個代理對象來代表這個對象,這個對象上的所有屬性都是默許值。只有在真正需要使用該對象的數據時才創建這個真實對象,真正從數據庫中加載它的數據,這樣在某些情況下,可以提高查詢效力。


    get方法不支持延遲加載,get方法在查詢不到對象時不會出現異常。與之對應的load方法支持延遲加載,load在查詢不到對象時會拋出異常。舉個例子說明1下,現在我們都知道了Hibernate的延遲加載會下降系統的內存開消,在某些程度上卻是會給程序的查詢效力帶來好處,但有時候明確知道數據需要立刻被加載,如果Hibernate先默許使用延遲加載,隨后又必須去數據庫加載,反而會下降效力。這個時候怎樣辦?記住上面說的,get方法是不支持延遲加載的,如果在加載單個實體時,如果不需要延遲加載,就能夠使用session的get()方法。提到session又想到了,Hibernate支持延遲加載必須在session開啟的情況下才有效。


    對Hibernate的延遲加載的基本介紹先到這里,研究的還不是特別深入,在以后的利用中會漸漸更新這方面的文章。個人覺得緩存機制和延遲加載是Hibernate中比較重要的知識點,需要很好的掌握。其實深挖東西是挺多的,歡迎大家提寶貴意見,歡迎留言我們1起溝通交換。

生活不易,碼農辛苦
如果您覺得本網站對您的學習有所幫助,可以手機掃描二維碼進行捐贈
程序員人生
------分隔線----------------------------
分享到:
------分隔線----------------------------
關閉
程序員人生
主站蜘蛛池模板: 亚洲国产欧美日韩一区二区三区 | 中国a级淫片免费播放 | 最近中文字幕国语完整视频 | 久久久久夜 | 精品国产免费一区二区三区 | 性猛交╳xxx乱大交 性猛交xxxxx按摩 | 91九色最新地址 | 性欧美丨18一19 | 最近中文字幕免费2019 | 久操免费在线 | 欧美一区二区三区高清不卡tv | 国产免费一级高清淫曰本片 | 亚洲成aⅴ人片在线影院八 亚洲成aⅴ人在线观看 | 午夜dj视频在线高清免费 | 国产三级做爰高清视频a | 亚洲中午字幕 | 福利视频一区二区 | 国产美女无遮挡免费网站 | 秋霞一级成人欧美理论 | 中文字幕无线 | 亚洲免费黄网 | 国产精品久久久久久久久免费 | 18岁禁免费网站 | 久久人人爱| 精品国产一区二区三区久久 | 免费麻豆国产一区二区三区四区 | 久久精品一区二区三区四区 | 欧美一级毛片在线播放 | 国内自拍亚洲 | 97理伦 | 亚洲码欧美码一区二区三区 | 中文字幕乱码视频中文字幕14 | xxxxx黄在线观看| 中文字幕乱码一二三四区 | 亚洲二区在线观看 | 亚洲性猛交xx乱 | 国产精品国产精品国产专区不卡 | 精品一区二区久久 | 澳门成人免费永久视频 | 欧美三级大片在线观看 | 亚洲久久在线 |