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();
- }
- }
相关推荐
NULL 博文链接:https://364232252.iteye.com/blog/2369161
传播智客,为Spring集成的Hibernate配置二级缓存、cache.xml
为Spring集成的Hibernate配置二级缓存
主要讲解hibernate缓存的配置和和使用方法,以及一级缓存和二级缓存的定义和区别,和查询缓存的使用
基于springboot最新版本2.1.4.RELEASE,采用jpa为dao层框架,配置redis(redisson)为hibernate的二级缓存。
此配置和包,是springMVC4.3.3 +spring4+hibernate5.1.3+二级缓存ehcache(不用可以关闭)+fastjson。 是正常运行的项目里拷出来的,方便大家使用。
hibernate5.1二级缓存包
-- 查询的二级缓存配置 --> <property name="hibernate.cache.use_query_cache">true <property name="cache.provider_class">org.hibernate.cache.EhCacheProvider 4.0配置如下: <property name="hibernate...
Hibernate二级缓存 在一个数据库系统中,如果缓存设置的合适,那么可以极大的提高系统的效率,Hibernate作为一个ORM工具 提供了缓存的机制,包括一级(Session级)缓存和二级(SessionFactory级)缓存。这里主要...
学习hibernate的必备,提供一个简易的流程图,方便记忆和查找
文档中说明了Hibernate二级缓存的事务范围、进程范围、集群范围的缓存配置。主要针对进程范围EhCacheProvider进行讲解,及查询缓存的讲解。
Hibernate中提供了两级Cache,第一级别的缓存是Session级别的缓存,它是属于事务范围的缓存。这一级别的缓存由hibernate管理的,一般情况下无需进行... Hibernate还为查询结果提供了一个查询缓存,它依赖于第二级缓存
Hibernate允许在类和集合的粒度上设置第二级缓存。在映射文件中,和元素都有一个子元素,这个子元素用来配置二级缓存。 示例:以category(产品类别)和product(产品)的映射为例: 1) 修改要配置缓存的那个持久化类的...
hibernate4配置ehcache二级缓存,以及相关的jar都在源码中。
二级缓存 :是SessionFactory对象缓存,可以被创建出的多个 Session 对象共享,二级缓存默认是关闭的,如果要使用需要手动开启,并且依赖EhCache组件。 三级缓存 :查询缓存,配置开启该缓存的情况下,重复使用一...
Hibernate二级缓存架包及相应配置文件
Hibernate EhCache 二级缓存配置
一对一映射 hibernate优化配置一级二级缓存步骤 有图有真相