`

Hibernate二级缓存配置:

阅读更多

http://chenhongbin007.blog.163.com/blog/static/3406992120094661950804/

 

转之方便自用。

 

Java代码  收藏代码
  1. 二级缓存配置:      
  2.   
  3.      
  4.   
  5. 1首先要打开二级缓存,在hibernate.cfg.xml中添加如下配置:      
  6.   
  7. <property name="hibernate.cache.use_second_level_cache">true</property>     
  8.   
  9.      
  10.   
  11. 2Hibernate的二级缓存使用第三方的缓存工具来实现,所以我们需要指定Hibernate使用哪个      
  12.   
  13.    缓存工具。如下配置指定Hibernate使用EhCache缓存工具。      
  14.   
  15. <property name="hibernate.cache.provider_class">org.hibernate.cache.EhCacheProvider</property>     
  16.   
  17.      
  18.   
  19. 3Hibernate在默认情况下并不会对所有实体对象进行缓存,所以,我们需要指定缓存哪些对象,      
  20.   
  21. 在实体对象的映射文件中(相应的<class>标签内部),添加如下配置:      
  22.   
  23. <cache usage="read-only"/>     
  24.   
  25.      
  26.   
  27. usage="read-only"是“只读”缓存策略。      
  28.   
  29.      
  30.   
  31. 注意,这个<cache>标签只能放在<class>标签的内部,而且必须处在<id>标签的前面!!!      
  32.   
  33. 这个<cache>标签放在哪些<class>标签下面,就说明会对这些类的对象进行缓存      
  34.   
  35.      
  36.   
  37. 4对于第3步,有一个可选的方案是在hibernate.cfg.xml文件中指定哪些类的对象需要缓存,      
  38.   
  39.    而不需要使用<cache>标签来指定。如:      
  40.   
  41.    在hibernate.cfg.xml中添加如下配置:      
  42.   
  43.    <class-cache class="com.bjsxt.hibernate.Classes" usage="read-only" />     
  44.   
  45.         
  46.   
  47.    注意,这个<class-cache>标签必须放在<mapping>标签的后面!!    
  48.   
  49.   
  50.   
  51. --------------------------------------------------------------------------------  
  52.   
  53.   
  54.   
  55.   
  56.   
  57.   
  58.   
  59. 1、首先设置EhCache,建立配置文件ehcache.xml,默认的位置在class-path,可以放到你的src目录下:   
  60.   
  61. <?xml version="1.0" encoding="UTF-8"?>   
  62.   
  63. <ehcache>   
  64.   
  65.  <diskStore path="java.io.tmpdir"/>   
  66.   
  67.   <defaultCache   
  68.   
  69.    maxElementsInMemory="10000" <!-- 缓存最大数目 -->   
  70.   
  71.    eternal="false" <!-- 缓存是否持久 -->   
  72.   
  73.    overflowToDisk="true" <!-- 是否保存到磁盘,当系统当机时-->   
  74.   
  75.    timeToIdleSeconds="300" <!-- 当缓存闲置n秒后销毁 -->   
  76.   
  77.    timeToLiveSeconds="180" <!-- 当缓存存活n秒后销毁-->   
  78.   
  79.    diskPersistent="false"   
  80.   
  81.    diskExpiryThreadIntervalSeconds= "120"/>   
  82.   
  83. </ehcache>   
  84.   
  85.   2、在Hibernate配置文件中设置:   
  86.   
  87. <!-- 设置Hibernate的缓存接口类,这个类在Hibernate包中 -->   
  88.   
  89. <property name="cache.provider_class">org.hibernate.cache.EhCacheProvider</property>   
  90.   
  91.  <!-- 是否使用查询缓存 -->   
  92.   
  93.  <property name="hibernate.cache.use_query_cache"true</property>   
  94.   
  95.   如果使用spring调用Hibernate的sessionFactory的话,这样设置:   
  96.   
  97.   <!--HibernateSession工厂管理 -->   
  98.   
  99.    <bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">   
  100.   
  101.    <property name="dataSource">   
  102.   
  103.     <ref bean="datasource" />   
  104.   
  105.    </property>   
  106.   
  107.    <property name="hibernateProperties">   
  108.   
  109.    <props>   
  110.   
  111.     <prop key="hibernate.dialect">org.hibernate.dialect.Oracle9Dialect</prop>   
  112.   
  113.     <prop key="connection.provider_class">org.hibernate.connection.C3P0ConnectionProvider</prop>   
  114.   
  115.     <prop key="hibernate.show_sql"true</prop>   
  116.   
  117.     <prop key="hibernate.cache.use_query_cache"true</prop>   
  118.   
  119.     <prop key="hibernate.cache.provider_class">org.hibernate.cache.EhCacheProvider</prop>   
  120.   
  121.    </props>   
  122.   
  123.  </property>   
  124.   
  125.  <property name="mappingDirectoryLocations">   
  126.   
  127.   <list>   
  128.   
  129.    <value>/WEB-INF/classes/cn/rmic/manager/hibernate/</value>   
  130.   
  131.   </list>   
  132.   
  133.  </property>   
  134.   
  135. </bean>   
  136.   
  137.   说明一下:如果不设置“查询缓存”,那么hibernate只会缓存使用load()方法获得的单个持久化对象,如果想缓存使用 findall()、list()、Iterator()、createCriteria()、createQuery()等方法获得的数据结果集的话,就需要设置   
  138.   
  139. hibernate.cache.use_query_cache true 才行   
  140.   
  141.   3、在Hbm文件中添加<cache usage="read-only"/>   
  142.   
  143.   4、如果需要“查询缓存”,还需要在使用Query或Criteria()时设置其setCacheable(true);属性   
  144.   
  145.   5、实践出真知,给一段测试程序,如果成功的话第二次查询时不会读取数据库   
  146.   
  147. package cn.rmic.hibernatesample;   
  148.   
  149. import java.util.List;   
  150.   
  151. import org.hibernate.CacheMode;   
  152.   
  153. import org.hibernate.Criteria;   
  154.   
  155. import org.hibernate.Query;   
  156.   
  157. import org.hibernate.Session;   
  158.   
  159. import cn.rmic.hibernatesample.hibernate.HibernateSessionFactory;   
  160.   
  161. import cn.rmic.manager.po.Resources;   
  162.   
  163. public class testCacheSelectList ...{   
  164.   
  165.  /** *//**  
  166.  
  167.  * @param args  
  168.  
  169.  */   
  170.   
  171.  public static void main(String[] args) ...{   
  172.   
  173.   // TODO Auto-generated method stub   
  174.   
  175.   Session s=HibernateSessionFactory.getSession();   
  176.   
  177.   Criteria c=s.createCriteria(Resources.class);   
  178.   
  179.   c.setCacheable(true);   
  180.   
  181.   List l=c.list();   
  182.   
  183.   // Query q=s.createQuery("From Resources r")   
  184.   
  185.   // .setCacheable(true)   
  186.   
  187.   // .setCacheRegion("frontpages") ;   
  188.   
  189.   // List l=q.list();   
  190.   
  191.   Resources resources=(Resources)l.get(0);   
  192.   
  193.   System.out.println("-1-"+resources.getName());   
  194.   
  195.   HibernateSessionFactory.closeSession();   
  196.   
  197.   try ...{   
  198.   
  199.    Thread.sleep(5000);   
  200.   
  201.   } catch (InterruptedException e) ...{   
  202.   
  203.    // TODO Auto-generated catch block   
  204.   
  205.    e.printStackTrace();   
  206.   
  207.   }   
  208.   
  209.   s=HibernateSessionFactory.getSession();   
  210.   
  211.   c=s.createCriteria(Resources.class);   
  212.   
  213.   c.setCacheable(true);   
  214.   
  215.   l=c.list();   
  216.   
  217.   // q=s.createQuery("From Resources r").setCacheable(true)   
  218.   
  219.   // .setCacheRegion("frontpages");   
  220.   
  221.   // l=q.list();   
  222.   
  223.   resources=(Resources)l.get(0);   
  224.   
  225.   System.out.println("-2-"+resources.getName());   
  226.   
  227.   HibernateSessionFactory.closeSession();   
  228.   
  229.  }   
  230.   
  231. }  
分享到:
评论

相关推荐

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

    Hibernate二级缓存

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

    Spring集成的Hibernate配置二级缓存

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

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

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

    hibernate二级缓存java包下载

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

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

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

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

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

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

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

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

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

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

    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 二级缓存

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

    hibernate二级缓存所需要的 jar包

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

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

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

Global site tag (gtag.js) - Google Analytics