`
tempsitegoogle
  • 浏览: 885725 次
文章分类
社区版块
存档分类
最新评论

Hibernate缓存的使用

 
阅读更多

hibernate缓存有两种

1,session缓存也叫一级缓存和内置缓存

2,sessionFractory缓存也叫二级缓存的外置缓存

使用二级缓存配置:

1、首先要打开二级缓存,在hibernate.cfg.xml中添加如下配置:

<propertyname="hibernate.cache.use_second_level_cache">true</property>

2、Hibernate的二级缓存使用第三方的缓存工具来实现,所以我们需要指定Hibernate使用哪个

缓存工具。如下配置指定Hibernate使用EhCache缓存工具。

<propertyname="hibernate.cache.provider_class">org.hibernate.cache.EhCacheProvider</property>

3、Hibernate在默认情况下并不会对所有实体对象进行缓存,所以,我们需要指定缓存哪些对象,

在实体对象的映射文件中(相应的<class>标签内部),添加如下配置:

<cacheusage="read-only"/>

usage="read-only"是“只读”缓存策略。

注意,这个<cache>标签只能放在<class>标签的内部,而且必须处在<id>标签的前面!!!

这个<cache>标签放在哪些<class>标签下面,就说明会对这些类的对象进行缓存

4、对于第3步,有一个可选的方案是在hibernate.cfg.xml文件中指定哪些类的对象需要缓存,

而不需要使用<cache>标签来指定。如:

在hibernate.cfg.xml中添加如下配置:

<class-cacheclass="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();

 }

}

分享到:
评论

相关推荐

    Hibernate缓存.doc

    Hibernate缓存.docHibernate缓存.doc

    Hibernate缓存深入详解 from ITEye

    **Hibernate缓存深入详解** 在Java企业级应用开发中,Hibernate作为一款强大的对象关系映射(ORM)框架,极大地简化了数据库操作。然而,随着应用规模的扩大,数据访问性能成为了一个不可忽视的问题。这时,...

    Hibernate缓存技术研究

    ### Hibernate缓存技术研究 #### 一、引言 Hibernate是一种强大的对象-关系映射(Object-Relational Mapping,简称ORM)工具,主要用于Java环境下的应用程序。它能够将应用程序中的对象模型映射到关系型数据库的表...

    Java Hibernate缓存深入详解

    Java Hibernate缓存深入详解

    hibernate缓存机制

    Hibernate缓存机制是提高应用程序性能的关键技术之一,它通过存储数据副本减少对物理数据库的访问。缓存可以分为两层:第一级缓存和第二级缓存。 **第一级缓存**是内置在Session中的,它是不可卸载的,也称为...

    Hibernate缓存,性能优化

    - **性能监控工具**:利用JProfiler、VisualVM等工具,定期分析应用性能瓶颈,识别缓存使用不当、SQL查询低效等问题,并进行针对性优化。 - **持续集成测试**:在开发流程中集成性能测试环节,确保每次代码提交都...

    Hibernate缓存深入详解

    【Hibernate缓存深入详解】 在Java的持久化框架Hibernate中,缓存机制是提升系统性能的关键因素。它位于Hibernate应用和数据库之间,减少了对数据库的直接访问,从而提高了应用程序的运行速度。缓存中存储的是...

    hibernate缓存深入详解.

    关于hibernate缓存的一个ppt课件,60+幻灯片,有需要的可以看一下

    Hibernate缓存与spring事务详解

    **标题:“Hibernate缓存与Spring事务详解”** 在IT领域,尤其是Java开发中,Hibernate作为一款流行的ORM(对象关系映射)框架,极大地简化了数据库操作。而Spring框架则以其全面的功能,包括依赖注入、AOP(面向切...

    hibernate缓存和事务

    Hibernate 是一个流行的对象关系映射(ORM)框架,它允许Java...通过理解Hibernate缓存和事务管理,以及如何有效地执行查询,开发者可以创建高效、健壮的Java应用程序,降低与数据库交互的复杂性,同时提升系统性能。

    hibernate缓存

    ### Hibernate缓存机制及优化策略 #### 一、概述 Hibernate作为一款优秀的对象关系映射(ORM)框架,在Java开发领域被广泛应用于数据库操作。它提供了丰富的缓存机制来提高应用性能并降低数据库访问压力。本文将...

    Hibernate缓存详解

    本文将详细讲解Hibernate缓存的原理、类型以及使用方法。 ### 1. Hibernate缓存概述 缓存是存储在内存中的临时数据,当应用程序需要数据时,首先从缓存中查找,而不是直接查询数据库。这样可以减少网络延迟,提高...

    Hibernate缓存策略

    Hibernate缓存原理及调优策略 Hibernate缓存原理调优策略

    hibernate缓存ehcache用法

    这篇博客文章“hibernate缓存ehcache用法”可能详细介绍了如何在Hibernate中配置和使用Ehcache。 首先,我们需要理解什么是缓存。缓存是一种存储技术,用于临时保存经常访问的数据,以减少对主存储器(如数据库)的...

    Hibernate教程25_Hibernate缓存

    7. **示例代码**:通过提供的源码,我们可以学习如何在实际项目中配置和使用Hibernate缓存,包括创建缓存配置、声明缓存区域、启用查询缓存等。 总的来说,这个教程应该涵盖了Hibernate缓存的基础知识,包括一级...

    hibernate缓存深入详解

    hibernate缓存深入详解

Global site tag (gtag.js) - Google Analytics