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級別 的快取。你甚至可以為之插入乙個集群的快取。注意,快取永遠不知道其他應用程式對持久化倉庫 資料庫 可能進行的修改 即使可以將快取資料設定為...