hibernate的二級快取詳解

2021-06-02 19:01:30 字數 2662 閱讀 8844

hibernate二級快取

在乙個資料庫系統中,如果快取設定的合適,那麼可以極大的提高系統的效率,hibernate作為乙個orm工具

提供了快取的機制,包括一級(session級)快取和二級(sessionfactory級)快取。這裡主要總結一下二級快取。

1.首先需要在hibernate.cfg.xml中配置,當然需要匯入快取的jar包

<

property 

name

="hibernate.cache.use_query_cache"

>

true

property

>

<

property 

name

="hibernate.cache.provider_class"

>

org.hibernate.cache.ehcacheprovider

property

>

hibernate.cache.use_query_cache必須配置,如果想快取使用findall()、list()、iterator()、createcriteria()、

createquery()等方法獲得的資料結果集。

2.在每個實體的hbm檔案中配置cache元素,usage可以是read-only或者是read-write等。

<

>

<

class 

name

="com.***.db.base.city"

table

="city"

catalog

="haosou"

>

<

cache 

usage

="nonstrict-read-write"

/>

<

id name

="citycode"

type

="string"

>

<

column 

name

="citycode"

/>

<

generator 

class

="assigned"

/>

id>

<

property 

name

="city"

type

="string"

>

<

column 

name

="city"

not-null

="true"

/>

property

>

<

set 

name

="districts"

table

="district"

cascade

="all"

inverse

="true"

>

<

key 

column

="citycode"

/>

<

one-to-many 

class

="com.haosou.db.base.district"

/>

set>

class

>

>

如果相對具體某個類的快取進行特定的配置,需要在ehcache.xml進行配置:

<

cache 

name

="org.qiujy.domain.cachedemo.category"

maxelementsinmemory

="100"

eternal

="true"

timetoidleseconds

="0"

timetoliveseconds

="0"

overflowtodisk

="false"

/>

3.query或criteria()時設定其setcacheable(true);

session session 

=hibernatesessionfactory.getcurrentsession();

query q 

=session.createquery(

"from city");

q.setcacheable(

true

);return

q.list();

session session 

=hibernatesessionfactory.getcurrentsession();

query q 

=session.createquery(

"from district d where d.city.citycode='"+

cityid +"

'");q.setcacheable(

true

);return

q.list();

執行以上**時,第一次會查詢資料庫,但是後面就直接從快取中查詢,而不會使用資料庫的連線,提高了效能。

以上任一環節都不能少,比如cache元素沒有配置,那麼就會導致查詢district的時候發起n個資料庫的連線,這樣會極大的降低效能。

hibernate二級快取

cacheconcurrencystrategy.none cacheconcurrencystrategy.read only 唯讀模式,在此模式下,如果對資料進行更新操作,會有異常 cacheconcurrencystrategy.read write 讀寫模式在更新快取的時候會把快取裡面的資料...

hibernate 二級快取

session快取 一級快取 sql查詢結果快取,由hibernate管理 sessionfactory內建快取,內建快取是hibernate自帶的,用於存放預定義的sql以及hbm.xml描述的元資料,不可解除安裝 sessionfactory外接快取 二級快取 由外部外掛程式提供,外接快取的資料...

Hibernate二級快取

hibernate的session在事務級別進行持久化資料的快取操作。當然,也有可能分別為每個類 或集合 配置集群 或jvm級別 sessionfactory級別 的快取。你甚至可以為之插入乙個集群的快取。注意,快取永遠不知道其他應用程式對持久化倉庫 資料庫 可能進行的修改 即使可以將快取資料設定為...