Hibernate的一级缓存和二级缓存

1,什么是缓存?

2,什么是一级缓存?

一级缓存,就是session级别的缓存

同一个session里,如果查询的数据存在,则直接在内存中取出,不发出sql语句

3,什么是二级缓存?

二级缓存,就是SessionFactory级别的缓存,可以跨越session存在

打开二级缓存

1,在hibernate.cfg.xml中设定

<property name=cache.use_second_level>true</property>

<property name=cache.provider_class>org.hibernate.cache.EhCacheProvider</property>

配置ehcache.xml配置文件

DefaultCache

maxElementsInMemory 最大对象个数

Eternal 永远生存 = true  可以替换缓存对象

timeToIdleSeconds  = 120  120秒后没有使用,去掉

TimeToLiveSconds  = 1200  1200生存时间后,去掉,生命值

OverflowToDisk=true   内存不够用,放在硬盘上

 

二级缓存适合的对象

经常被访问

改动不大,不会经常被改动

数量有限

(组织机构,权限,地区)

2,是用@cache注解,需要使用二级缓存的对象(org.hibernate.annotations)

@cache(usage=CacheConcurrencyStrategy.READ_ONLY)  READ_WRITE(用的比较多)

4,load默认使用二级缓存,iterate 默认使用二级缓存

List默认往二级缓存加数据,但是查询的时候不会使用二级缓存

5,如果要query用二级缓存,需要打开查询缓存

查询缓存起作用的话,必须这个查询条件一样

I,<property name=cache.use_query_cache>true</property>

ii.调用Query的setCacheable(true)方法指明使用二级缓存