日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

hibernate缓存机制

發(fā)布時(shí)間:2024/10/12 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 hibernate缓存机制 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

hibernate一級緩存

1.Hibernate一級緩存又稱為“Session緩存”,“會(huì)話級緩存”。

2.通過Session從數(shù)據(jù)庫查詢實(shí)體時(shí)會(huì)把實(shí)體在內(nèi)存中存儲(chǔ)起來,下一次查詢同一實(shí)體時(shí)不再從數(shù)據(jù)庫獲取,而是從內(nèi)存中獲取,這就是緩存

3.一級緩存的生命周期和Session相同,Session銷毀,它也銷毀。

4.一級緩存中的數(shù)據(jù)可適用范圍在當(dāng)前會(huì)話之內(nèi)。

?

管理一級緩存的API

1.evict(),用于將某個(gè)對象從Session的一級緩存中清除。

2.clear(),用于將一級緩存中的所有對象全部清除。

?

Qurey.list()和Qurey.iterate()

1.Qurey.list()查詢數(shù)據(jù),不會(huì)從一級緩存中查找,直接向數(shù)據(jù)庫發(fā)送sql語句,將查詢返回的對象保留在緩存中。

2.Qurey.iterate()不從一級緩存中找,直接向數(shù)據(jù)庫發(fā)送sql,查詢id,當(dāng)需要使用對象其他屬性的時(shí)候,先在緩存中根據(jù)id查找對象,如果沒有則向數(shù)據(jù)庫發(fā)送sql查詢,因此單獨(dú)用該方法查詢會(huì)產(chǎn)生N+1問題(即向數(shù)據(jù)庫發(fā)送N+1條語句查詢N個(gè)對象的信息)

3.如果存在這種需求:在兩個(gè)不同的session都需要對相同的對象進(jìn)行訪問,通過Qurey.list()需要發(fā)送兩條sql語句甚至更多,為了避免可以設(shè)置二級緩存,在第一個(gè)session中Query.list(),在第二個(gè)session中直接通過Qurey.iterate()迭代從二級緩存中獲取

?

hibernate二級緩存(SessionFactory緩存)

1.添加在hibernate.cfg.xml里面的配置

<!-- 開啟二級緩存 --><property name="hibernate.cache.use_second_level_cache">true</property><!-- 二級緩存的提供類 在hibernate4.0版本以后我們都是配置這個(gè)屬性來指定二級緩存的提供類--><property name="hibernate.cache.region.factory_class">org.hibernate.cache.ehcache.EhCacheRegionFactory</property><!-- 二級緩存配置文件的位置 --><property name="hibernate.cache.provider_configuration_file_resource_path">ehcache.xml</property>

2.配置ehcache.xml具體見http://www.cnblogs.com/kundeg/p/7172428.html?

3.通過注釋配置entity,在類前加上@Cache(usage=CacheConcurrencyStrategy.READ_ONLY)

?CacheConcurrencyStrategy屬性值常見的有READ_ONLY(對該entity對應(yīng)的表數(shù)據(jù)只讀取然后緩存)和READ-WIRTE(對表數(shù)據(jù)可以讀取也可以更新)

4,一定要注意:hibernate二級緩存的必須是整個(gè)對象,如果查詢的只是對象某些屬性,那么該對象不會(huì)被緩存

?

查詢緩存(SessionFactory級緩存)?

1.在上述二級緩存的基礎(chǔ)上繼續(xù)配置

2.在hibernate.cfg.xml中添加配置

<property name="hibernate.cache.use_query_cache">true</property>

2.在entity注釋上添加@Cacheable

3.在hql語句后要調(diào)用setCacheable(true)方法

4.只有當(dāng) HQL 查詢語句完全相同時(shí),連參數(shù)設(shè)置都要相同,此時(shí)查詢緩存才有效

?

hibernate的三種狀態(tài)(transient(瞬時(shí)狀態(tài)),persistent(持久化狀態(tài))以及detached(離線狀態(tài)))

?詳情見http://www.cnblogs.com/xiaoluo501395377/p/3380270.html

?

轉(zhuǎn)載于:https://www.cnblogs.com/kundeg/p/7173521.html

總結(jié)

以上是生活随笔為你收集整理的hibernate缓存机制的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。