日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢(xún)
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問(wèn)題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷(xiāo)解決方案
講述HibernateSession緩存

在向大家詳細(xì)介紹Hibernate Session緩存之前,首先讓大家了解下Hibernate實(shí)體對(duì)象的三種狀態(tài),然后全面介紹Hibernate Session緩存。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

其實(shí)還有Query Cache但怕篇幅太長(zhǎng),讓人煩所以就就此停筆,其實(shí)緩存是一個(gè)很深問(wèn)題,也很值得研究。


文章題目:講述HibernateSession緩存
URL網(wǎng)址:http://m.5511xx.com/article/ccchgeh.html