第四讲 Hibernate 缓存管理

缓存原理?

将一些重要的、核心数据加载到内存中,存放起来;当应用程序需要访问该数据时,直接从内存中获取该数据;(从内存中获取数据,而不是从磁盘上读取数据)

 

Hibernate中的缓存管理:

Hibernate中缓存分为:一级缓存(Session缓存)、二级缓存(SessionFactory缓存)。

一级缓存(Session缓存)由Hibernate自带。

特点:

1. 必须使用。

2. session关闭的时候,缓存自动清空。

3. 手动清除缓存。(clear()——清除所有session中的缓存;evict(Object obj)——清除指定的对象; flush() —— 刷新缓存)

 

二级缓存(SessionFactory缓存)Hibernate提供支持的接口(外部缓存库)。

特点:

1. 所有用户可以共享数据。(跟具体的session对象无关)

2. 消耗更多的内存资源。

3. 查询速度变快、修改时(增、删、改)需要维护缓存和数据库。

 

如何使用二级缓存(步骤)(EHCache缓存):

1. 修改hibernate.cfg.xml配置文件。(指定缓存插件、启动二级缓存功能)

 

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

 

1. 在src目录下,创建EHCache缓存的配置文件(ehcache.xml)。

 

2. 在*.hbm.xml配置文件中,添加<cache usage="read-write"/>。

 

 

 

注意:

清除二级缓存中的对象:
//清除所有类型
HibernateSessionFactory.getSessionFactory().evict(Emp.class);

//清除指定对象
HibernateSessionFactory.getSessionFactory().evict(Emp.class, 1);

//清除集合中的所有对象
HibernateSessionFactory.getSessionFactory().evictCollection("com.zuxia.entity.Dept.emps");
时间到达时,自动清除对象:
<defaultCache maxElementsInMemory="500" eternal="false"
timeToIdleSeconds="时间" timeToLiveSeconds="时间" overflowToDisk="true" />
当时间到达时,自动清除对象;eternal="false"必须为false才有效。
HQL语句默认不会执行缓存查询:
<property name="cache.use_query_cache">true</property>
查询时,调用Query中setCacheable(true)方法进行缓存查询。
注意:根据HQL查询语句,缓存对象。(两条语句相同时,才能执行查询缓存)

 

 

posted on 2012-11-05 09:16  somewhere!  阅读(248)  评论(0编辑  收藏  举报

导航