http://chenhongbin007.blog.163.com/blog/static/3406992120094661950804/
转之方便自用。
- 二级缓存配置:
- 1、首先要打开二级缓存,在hibernate.cfg.xml中添加如下配置:
- <property name="hibernate.cache.use_second_level_cache">true</property>
- 2、Hibernate的二级缓存使用第三方的缓存工具来实现,所以我们需要指定Hibernate使用哪个
- 缓存工具。如下配置指定Hibernate使用EhCache缓存工具。
- <property name="hibernate.cache.provider_class">org.hibernate.cache.EhCacheProvider</property>
- 3、Hibernate在默认情况下并不会对所有实体对象进行缓存,所以,我们需要指定缓存哪些对象,
- 在实体对象的映射文件中(相应的<class>标签内部),添加如下配置:
- <cache usage="read-only"/>
- usage="read-only"是“只读”缓存策略。
- 注意,这个<cache>标签只能放在<class>标签的内部,而且必须处在<id>标签的前面!!!
- 这个<cache>标签放在哪些<class>标签下面,就说明会对这些类的对象进行缓存
- 4、对于第3步,有一个可选的方案是在hibernate.cfg.xml文件中指定哪些类的对象需要缓存,
- 而不需要使用<cache>标签来指定。如:
- 在hibernate.cfg.xml中添加如下配置:
- <class-cache class="com.bjsxt.hibernate.Classes" usage="read-only" />
- 注意,这个<class-cache>标签必须放在<mapping>标签的后面!!
- --------------------------------------------------------------------------------
- 1、首先设置EhCache,建立配置文件ehcache.xml,默认的位置在class-path,可以放到你的src目录下:
- <?xml version="1.0" encoding="UTF-8"?>
- <ehcache>
- <diskStore path="java.io.tmpdir"/>
- <defaultCache
- maxElementsInMemory="10000" <!-- 缓存最大数目 -->
- eternal="false" <!-- 缓存是否持久 -->
- overflowToDisk="true" <!-- 是否保存到磁盘,当系统当机时-->
- timeToIdleSeconds="300" <!-- 当缓存闲置n秒后销毁 -->
- timeToLiveSeconds="180" <!-- 当缓存存活n秒后销毁-->
- diskPersistent="false"
- diskExpiryThreadIntervalSeconds= "120"/>
- </ehcache>
- 2、在Hibernate配置文件中设置:
- <!-- 设置Hibernate的缓存接口类,这个类在Hibernate包中 -->
- <property name="cache.provider_class">org.hibernate.cache.EhCacheProvider</property>
- <!-- 是否使用查询缓存 -->
- <property name="hibernate.cache.use_query_cache">true</property>
- 如果使用spring调用Hibernate的sessionFactory的话,这样设置:
- <!--HibernateSession工厂管理 -->
- <bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
- <property name="dataSource">
- <ref bean="datasource" />
- </property>
- <property name="hibernateProperties">
- <props>
- <prop key="hibernate.dialect">org.hibernate.dialect.Oracle9Dialect</prop>
- <prop key="connection.provider_class">org.hibernate.connection.C3P0ConnectionProvider</prop>
- <prop key="hibernate.show_sql">true</prop>
- <prop key="hibernate.cache.use_query_cache">true</prop>
- <prop key="hibernate.cache.provider_class">org.hibernate.cache.EhCacheProvider</prop>
- </props>
- </property>
- <property name="mappingDirectoryLocations">
- <list>
- <value>/WEB-INF/classes/cn/rmic/manager/hibernate/</value>
- </list>
- </property>
- </bean>
- 说明一下:如果不设置“查询缓存”,那么hibernate只会缓存使用load()方法获得的单个持久化对象,如果想缓存使用 findall()、list()、Iterator()、createCriteria()、createQuery()等方法获得的数据结果集的话,就需要设置
- hibernate.cache.use_query_cache true 才行
- 3、在Hbm文件中添加<cache usage="read-only"/>
- 4、如果需要“查询缓存”,还需要在使用Query或Criteria()时设置其setCacheable(true);属性
- 5、实践出真知,给一段测试程序,如果成功的话第二次查询时不会读取数据库
- package cn.rmic.hibernatesample;
- import java.util.List;
- import org.hibernate.CacheMode;
- import org.hibernate.Criteria;
- import org.hibernate.Query;
- import org.hibernate.Session;
- import cn.rmic.hibernatesample.hibernate.HibernateSessionFactory;
- import cn.rmic.manager.po.Resources;
- public class testCacheSelectList ...{
- /** *//**
- * @param args
- */
- public static void main(String[] args) ...{
- // TODO Auto-generated method stub
- Session s=HibernateSessionFactory.getSession();
- Criteria c=s.createCriteria(Resources.class);
- c.setCacheable(true);
- List l=c.list();
- // Query q=s.createQuery("From Resources r")
- // .setCacheable(true)
- // .setCacheRegion("frontpages") ;
- // List l=q.list();
- Resources resources=(Resources)l.get(0);
- System.out.println("-1-"+resources.getName());
- HibernateSessionFactory.closeSession();
- try ...{
- Thread.sleep(5000);
- } catch (InterruptedException e) ...{
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
- s=HibernateSessionFactory.getSession();
- c=s.createCriteria(Resources.class);
- c.setCacheable(true);
- l=c.list();
- // q=s.createQuery("From Resources r").setCacheable(true)
- // .setCacheRegion("frontpages");
- // l=q.list();
- resources=(Resources)l.get(0);
- System.out.println("-2-"+resources.getName());
- HibernateSessionFactory.closeSession();
- }
- }
相关推荐
以下是一个简单的二级缓存配置示例: ```xml <hibernate-configuration> <!-- 配置缓存插件 --> <property name="hibernate.cache.region.factory_class">org.hibernate.cache.ehcache.EhCacheRegionFactory ...
在这个"hibernate二级缓存实例"中,我们将深入探讨二级缓存的原理、配置以及在实际项目中的应用。 首先,我们需要了解一级缓存和二级缓存的区别。一级缓存是Session级别的,每个Session都有自己的一级缓存,用于...
Hibernate二级缓存是一种提高应用程序性能的技术,它将数据存储在SessionFactory级别的缓存中,使得数据可以在不同的Session之间共享。这与一级缓存(Session级别)不同,一级缓存仅存在于单个Session生命周期内,当...
以EhCache为例,我们需要在项目中引入ehcache-core或ehcache的依赖,并在Hibernate配置文件(hibernate.cfg.xml或persistence.xml)中启用二级缓存,添加如下配置: ```xml <property name="hibernate.cache.use_...
二级缓存可以通过设置不同的并发访问策略来解决并发问题,如事务型、读写型或非严格读写型,以适应不同场景下的需求。 持久化层的缓存范围决定了缓存的生命周期和访问权限。事务范围的缓存最安全,但只限于当前事务...
二级缓存是 Hibernate 缓存策略的一部分,它在应用程序的多个会话之间共享数据,进一步优化了数据库访问效率。 二级缓存分为以下关键知识点: 1. **一级缓存与二级缓存的区别**: - 一级缓存:每个 Hibernate ...
- **配置复杂**:二级缓存需要在Hibernate配置文件中指定缓存提供商,并对实体类进行配置,以便它们能够参与缓存。 - **缓存策略**:二级缓存支持不同的缓存策略,如读写策略、只读策略、定时刷新策略等,可以根据...
本篇将深入探讨Hibernate的一级缓存和二级缓存,以及查询缓存的配置和使用。 ### 一级缓存 一级缓存是Hibernate默认提供的缓存,它是Session级别的,每个Hibernate Session都有一个私有的、本地的一级缓存。当我们...
**hibernate二级缓存详解** Hibernate作为Java领域中广泛使用的对象关系映射(ORM)框架,极大地简化了数据库操作。然而,在处理大量数据时,性能优化显得尤为重要,这就是二级缓存的作用。本文将深入探讨Hibernate...
配置Ehcache作为二级缓存提供商,需要在Hibernate的配置文件中设置`hibernate.cache.provider_class`为`net.sf.hibernate.cache.EhCacheProvider`。如果启用查询缓存,还需添加`hibernate.cache.use_query_cache=...
Hibernate二级缓存是Java开发中使用Hibernate框架进行数据持久化时优化性能的一种重要技术。它在一级缓存(Session级别的缓存)的基础上,提供了一个全局的、跨会话的数据存储层,可以显著减少对数据库的访问,从而...
通过以上步骤,我们就成功地在Spring Boot 2.1.4.RELEASE项目中配置了使用Redis作为Hibernate二级缓存的环境。这将显著提升数据库查询效率,减少对数据库的压力,尤其在高并发场景下,效果尤为明显。记得在实际生产...
在Java企业级开发中,Spring和Hibernate是两个非常...3. **配置Spring**:在Spring的配置文件(如`applicationContext.xml`)中,配置Hibernate SessionFactory,并注入二级缓存配置。以下是一个配置示例: ```xml ...
**二、Hibernate二级缓存** 二级缓存是SessionFactory级别的,跨越了多个Session,可以被多个线程共享。它通常由第三方插件如EhCache、Infinispan等提供。二级缓存分为以下几种类型: 1. **集合缓存**:用于存储...
在Hibernate配置文件`hibernate.cfg.xml`中,我们需要开启二级缓存并指定缓存提供者: ```xml <property name="hibernate.cache.use_second_level_cache">true <property name="hibernate.cache.region.factory_...
本篇文章将深入探讨Hibernate二级缓存的概念、工作原理以及如何在实际项目中设置和使用。 **一、二级缓存概念** 一级缓存是每个Hibernate Session内部的一个内存区域,用于存储Session期间的操作对象。当Session...
本篇将详细介绍Hibernate二级缓存的概念、作用以及所需jar包的作用。 一、Hibernate二级缓存概念 Hibernate的一级缓存是指Session级别的缓存,每个Session内部都有一个一级缓存,用于存储实体对象,当Session关闭时...
标题“hibernate二级缓存(包括注解方式)”指出了本文将探讨的是Hibernate框架中的二级缓存机制,并且会涉及使用注解的方式进行配置。Hibernate是一个流行的对象关系映射(ORM)框架,它允许开发者在Java应用中使用...