真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

HibernateSession緩存怎么理解

本篇內(nèi)容介紹了“Hibernate Session緩存怎么理解”的有關(guān)知識,在實(shí)際案例的操作過程中,不少人都會(huì)遇到這樣的困境,接下來就讓小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細(xì)閱讀,能夠?qū)W有所成!

創(chuàng)新互聯(lián)建站專注于鄧州企業(yè)網(wǎng)站建設(shè),響應(yīng)式網(wǎng)站設(shè)計(jì),購物商城網(wǎng)站建設(shè)。鄧州網(wǎng)站建設(shè)公司,為鄧州等地區(qū)提供建站服務(wù)。全流程專業(yè)公司,專業(yè)設(shè)計(jì),全程項(xiàng)目跟蹤,創(chuàng)新互聯(lián)建站專業(yè)和態(tài)度為您提供的服務(wù)

Hibernate作為一種現(xiàn)在比較流行的輕量級的ORM框架,2003年開始在國內(nèi)流行,到目前來說在做持久層上還是占有統(tǒng)治地位的。雖然說豐富靈活的HQL和面對對象的Criteria查詢,把程序員從復(fù)雜繁瑣的JDBC中解放了出來,但作為持久層的框架,它的性能才是最重要的核心問題。而性能的核心在于緩存,由于最近在學(xué)習(xí)這些,所以就把自己的學(xué)到的一點(diǎn)東西拿來與大家分享,希望能起到拋磚引玉的效果。

在說這些之前的先說說Hibernate實(shí)體對象的三種狀態(tài):

1.Transient:所謂Transient就是說實(shí)體對象在內(nèi)存中自有存在,與數(shù)據(jù)庫中的記錄無關(guān)。

2.Persient:Persient對象對應(yīng)數(shù)據(jù)庫中的一條記錄,也可以這樣理解,如果一個(gè)實(shí)體對象與某個(gè)session發(fā)生關(guān)聯(lián),并處于對應(yīng)session的有效期內(nèi),那它就處于Persient狀態(tài)。

3.Detached:所謂的Detached就是處于Persient狀態(tài)的對象對應(yīng)的session關(guān)閉之后的狀態(tài)。

我們平時(shí)所說的PO(持久化對象)指的就是位于Persient狀態(tài)的對象,而VO(值對象)就是指Transient和Detached狀態(tài)的對象。

下面開始說CRUD保存:Hibernate中保存的方法很多我主要說說下面幾個(gè):

1.save()方法,調(diào)用save方法時(shí),首先會(huì)在Hibernate Session緩存中查找保存對象如果實(shí)體對象已經(jīng)處于Persient狀態(tài),直接返回,否在實(shí)行sql操作,并將保存的實(shí)體對象加入Hibernate Session緩存(save方法不會(huì)把實(shí)體加入二級緩存的),***對存在的級聯(lián)關(guān)系進(jìn)行遞歸處理。

2.saveOrUpdate()方法:和save方法一樣首先在Hibernate Session緩存中查找,判斷對象是否為為保存狀態(tài),如果對象處于Persient,不執(zhí)行操作,處于Transient執(zhí)行save操作,處于Detached調(diào)用save將對象與session重新關(guān)聯(lián)。

這里要注意的是批量操作時(shí)要適時(shí)對session進(jìn)行flush操作避免OutOfMenoryError.刪除:刪除我主要說批量刪除,Hibernate在進(jìn)行批量刪除前,首先必須將所有符合條件的數(shù)據(jù)加載到內(nèi)存中(這是所有ORM框架必須面對的問題,這樣主要是為了對目前的內(nèi)部緩存和二級緩存中數(shù)據(jù)進(jìn)行整理,以保存和數(shù)據(jù)庫的一致性)這樣就面對這如果操作數(shù)據(jù)量過大,也會(huì)出現(xiàn)OutOfMenoryError,所以推薦使用迭代刪除。

修改:修改主要談?wù)剈pdate方法,update和前面的save一樣首先還是要進(jìn)行在內(nèi)部緩存中查找,要注意兩點(diǎn),

1.Persient狀態(tài)的實(shí)體對象調(diào)用update沒有任何作用,update的SQL將在session.flush()方法中執(zhí)行。

查詢:查詢是受緩存影響***的,主要談一下以下幾種查詢1.load和get:這兩者的區(qū)別主要是load會(huì)在二級緩存中查找,而get在內(nèi)部緩存中查找不到將跳過二級緩存直接進(jìn)行sql操作。

2.createQuery()的list()和iterate()方法,list()實(shí)際上無法使用緩存的,他對緩存只寫不讀,而ierate則是首先查找所有符合條件的數(shù)據(jù)id(首先在本地緩存中查找)在執(zhí)行相應(yīng)的select獲得對應(yīng)記錄,iterate方法的使用***是查找的實(shí)體對象在緩存已經(jīng)存在,否則查詢性能較低,易產(chǎn)生N+1現(xiàn)象。

“Hibernate Session緩存怎么理解”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識可以關(guān)注創(chuàng)新互聯(lián)網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實(shí)用文章!


網(wǎng)頁題目:HibernateSession緩存怎么理解
標(biāo)題鏈接:http://weahome.cn/article/gsgghj.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部