`
kidiaoer
  • 浏览: 822702 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
文章分类
社区版块
存档分类
最新评论

hibernate二级缓存配置

阅读更多

hibernate二级缓存配置 
 
二级缓存配置:   
  
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(); 
 } 
}

分享到:
评论

相关推荐

    Spring集成的Hibernate配置二级缓存

    以EhCache为例,我们需要在项目中引入ehcache-core或ehcache的依赖,并在Hibernate配置文件(hibernate.cfg.xml或persistence.xml)中启用二级缓存,添加如下配置: ```xml &lt;property name="hibernate.cache.use_...

    hibernate二级缓存实例

    在这个"hibernate二级缓存实例"中,我们将深入探讨二级缓存的原理、配置以及在实际项目中的应用。 首先,我们需要了解一级缓存和二级缓存的区别。一级缓存是Session级别的,每个Session都有自己的一级缓存,用于...

    Hibernate二级缓存配置详解

    《Hibernate二级缓存配置详解》 在Java的持久化框架Hibernate中,缓存技术是提升系统性能的关键之一。本文将深入探讨Hibernate的二级缓存,包括其事务范围、进程范围和集群范围的配置,特别是关注进程范围内的...

    Hibernate二级缓存

    Hibernate二级缓存是一种提高应用程序性能的技术,它将数据存储在SessionFactory级别的缓存中,使得数据可以在不同的Session之间共享。这与一级缓存(Session级别)不同,一级缓存仅存在于单个Session生命周期内,当...

    hibernate一级缓存和二级缓存的区别与联系

    二级缓存可以通过设置不同的并发访问策略来解决并发问题,如事务型、读写型或非严格读写型,以适应不同场景下的需求。 持久化层的缓存范围决定了缓存的生命周期和访问权限。事务范围的缓存最安全,但只限于当前事务...

    day37 05-HIbernate二级缓存:一级缓存更新同步到二级缓存及二级缓存配置文件

    以下是一个简单的二级缓存配置示例: ```xml &lt;hibernate-configuration&gt; &lt;!-- 配置缓存插件 --&gt; &lt;property name="hibernate.cache.region.factory_class"&gt;org.hibernate.cache.ehcache.EhCacheRegionFactory ...

    hibernate二级缓存示例源码

    **hibernate二级缓存详解** Hibernate作为Java领域中广泛使用的对象关系映射(ORM)框架,极大地简化了数据库操作。然而,在处理大量数据时,性能优化显得尤为重要,这就是二级缓存的作用。本文将深入探讨Hibernate...

    hibernate 二级缓存详解

    配置Ehcache作为二级缓存提供商,需要在Hibernate的配置文件中设置`hibernate.cache.provider_class`为`net.sf.hibernate.cache.EhCacheProvider`。如果启用查询缓存,还需添加`hibernate.cache.use_query_cache=...

    hibernate一级缓存、二级缓存和查询缓存

    - **配置复杂**:二级缓存需要在Hibernate配置文件中指定缓存提供商,并对实体类进行配置,以便它们能够参与缓存。 - **缓存策略**:二级缓存支持不同的缓存策略,如读写策略、只读策略、定时刷新策略等,可以根据...

    hibernate一级和二级缓存配置与详解

    本篇将深入探讨Hibernate的一级缓存和二级缓存,以及查询缓存的配置和使用。 ### 一级缓存 一级缓存是Hibernate默认提供的缓存,它是Session级别的,每个Hibernate Session都有一个私有的、本地的一级缓存。当我们...

    hibernate二级缓存包

    Hibernate二级缓存是Java开发中使用Hibernate框架进行数据持久化时优化性能的一种重要技术。它在一级缓存(Session级别的缓存)的基础上,提供了一个全局的、跨会话的数据存储层,可以显著减少对数据库的访问,从而...

    为Spring集成的Hibernate配置二级缓存

    在Java企业级开发中,Spring和Hibernate是两个非常...3. **配置Spring**:在Spring的配置文件(如`applicationContext.xml`)中,配置Hibernate SessionFactory,并注入二级缓存配置。以下是一个配置示例: ```xml ...

    hibernate二级缓存

    在Spring框架中管理SessionFactory时,可以在配置文件中添加相应的bean定义,指定数据源、Hibernate属性以及二级缓存的相关设置。例如,`hibernate.cache.use_query_cache`属性可以开启查询缓存,进一步优化性能。 ...

    springboot+jpa(hibernate配置redis为二级缓存) springboot2.1.4

    通过以上步骤,我们就成功地在Spring Boot 2.1.4.RELEASE项目中配置了使用Redis作为Hibernate二级缓存的环境。这将显著提升数据库查询效率,减少对数据库的压力,尤其在高并发场景下,效果尤为明显。记得在实际生产...

    hibernate二级缓存java包下载

    二级缓存是 Hibernate 缓存策略的一部分,它在应用程序的多个会话之间共享数据,进一步优化了数据库访问效率。 二级缓存分为以下关键知识点: 1. **一级缓存与二级缓存的区别**: - 一级缓存:每个 Hibernate ...

    Hibernate一级缓存和二级缓存

    **二、Hibernate二级缓存** 二级缓存是SessionFactory级别的,跨越了多个Session,可以被多个线程共享。它通常由第三方插件如EhCache、Infinispan等提供。二级缓存分为以下几种类型: 1. **集合缓存**:用于存储...

    Hibernate 二级缓存 总结整理

    在Hibernate配置文件`hibernate.cfg.xml`中,我们需要开启二级缓存并指定缓存提供者: ```xml &lt;property name="hibernate.cache.use_second_level_cache"&gt;true &lt;property name="hibernate.cache.region.factory_...

    hibernate二级缓存所需要的 jar包

    本篇将详细介绍Hibernate二级缓存的概念、作用以及所需jar包的作用。 一、Hibernate二级缓存概念 Hibernate的一级缓存是指Session级别的缓存,每个Session内部都有一个一级缓存,用于存储实体对象,当Session关闭时...

    hibernate 二级缓存

    本篇文章将深入探讨Hibernate二级缓存的概念、工作原理以及如何在实际项目中设置和使用。 **一、二级缓存概念** 一级缓存是每个Hibernate Session内部的一个内存区域,用于存储Session期间的操作对象。当Session...

    hibernate二级缓存(包括注解方式)

    标题“hibernate二级缓存(包括注解方式)”指出了本文将探讨的是Hibernate框架中的二级缓存机制,并且会涉及使用注解的方式进行配置。Hibernate是一个流行的对象关系映射(ORM)框架,它允许开发者在Java应用中使用...

Global site tag (gtag.js) - Google Analytics