`

Hibernate性能优化(二)

 
阅读更多
Hibernate的缓存优化
1、首先设置EhCache,建立配置文件ehcache.xml,默认的位置在class-path,可以放到你的src目录下:
Xml代码
<?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>  
<?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配置文件中设置:
Xml代码
<!-- 设置Hibernate的缓存接口类,这个类在Hibernate包中 -->   
<property name="cache.provider_class">org.hibernate.cache.EhCacheProvider</property>
   
 <!-- 是否使用查询缓存 -->   
 
<property name="hibernate.cache.use_query_cache">true</propert>    

  如果使用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的缓存接口类,这个类在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、实践出真知,给一段测试程序,如果成功的话第二次查询时不会读取数据库
Java代码
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性能优化研究.pdf

    ### Hibernate性能优化研究 #### 一、引言 随着企业级应用的发展,高效的数据持久化技术成为了提升系统性能的关键因素之一。Hibernate作为一种流行的面向Java环境的对象关系映射(Object-Relational Mapping,简称...

    Hibernate性能优化

    《Hibernate性能优化》 在Java应用开发中,Hibernate作为一个强大的对象关系映射(ORM)框架,极大地简化了数据库操作。然而,如果不进行适当的优化,它可能会成为系统性能的瓶颈。以下是一些关于Hibernate性能优化...

    hibernate性能优化

    珍藏的hibernate性能优化,如果对hibernate进行优化,很详细,是工作和面试的好助手

    hibernate性能优化方案

    ### Hibernate性能优化方案详解 #### 一、引言 Hibernate作为Java领域中广泛使用的对象关系映射(ORM)框架,其高效性和灵活性受到众多开发者的青睐。然而,不当的设计和配置往往会导致性能瓶颈,严重影响应用程序...

    Hibernate性能优化:一级缓存

    本文将深入探讨Hibernate性能优化中的一个重要概念——一级缓存,并结合给出的压缩包文件“hibernate_cache_level1”,来详细解析一级缓存的工作原理及其优化策略。 一级缓存是Hibernate内置的一种缓存机制,它存在...

    hibernate性能优化.doc

    Hibernate 性能优化 在 Hibernate 中,性能优化是非常重要的,因为它直接影响着应用程序的效率和可扩展性。在本文中,我们将讨论两个常见的性能优化问题:批量处理和 1+n 问题,并提供相应的解决方法。 问题 1:...

    Hibernate性能优化共9页.pdf.zip

    "Hibernate性能优化共9页.pdf.zip" 这个文件标题表明了内容专注于Hibernate框架的性能优化,暗示我们将探讨如何提升使用Hibernate进行数据库操作时的效率。通常,性能优化涉及减少延迟、提高吞吐量、降低资源消耗等...

    Hibernate性能优化:二级缓存

    二级缓存是Hibernate性能优化的重要手段,通过合理配置和使用,可以显著减少数据库访问,提高系统响应速度。但同时,需要注意缓存的副作用,如数据一致性、并发控制等问题。在实际应用中,需要结合业务场景和性能...

    Struts Spring Hibernate性能优化

    在进行大型项目开发时,性能优化是至关重要的,特别是对于基于SSH(Struts、Spring、Hibernate)这样的企业级框架的应用。SSH性能优化主要是针对Struts的MVC处理、Spring的依赖注入以及Hibernate的对象关系映射进行...

    Hibernate缓存,性能优化

    本文将深入探讨Hibernate缓存的原理、类型及其对性能优化的影响。 ### Hibernate缓存原理 Hibernate缓存主要分为一级缓存和二级缓存。一级缓存,也称为会话缓存(Session Cache),是默认启用的,由Hibernate自动...

    Hibernate3性能优化 Hibernate_regerence3.12

    的效率低于直接JDBC存取,然而,在经过比较好的性能优化之后,Hibernate的性能还是让人相当满意的, 特别是应用二级缓存之后,甚至可以获得比较不使用缓存的JDBC更好的性能,下面介绍一些通常的 Hibernate的优化策略...

    hibernate-性能优化

    【标签】:hibernate, 性能优化 【正文】: 1. **数据库设计调整**: - **降低关联的复杂性**:减少多对多关联,避免过度嵌套的对象关系。 - **避免联合主键**:联合主键可能导致额外的性能损失,尝试使用单独的...

    hibernate性能优化[参考].pdf

    以下是对《hibernate性能优化[参考].pdf》内容的详细解读: 1. **数据库优化**: - **物理硬件优化**:关注磁盘的IO性能,因为数据库读写频繁,磁盘的寻道能力直接影响数据访问速度。 - **MySQL配置优化**:通过...

    hibernate性能测试代码

    本话题将深入探讨“Hibernate性能测试代码”,以帮助我们理解如何有效地评估和优化Hibernate在实际应用中的表现。 首先,性能测试是软件开发过程中的关键环节,它旨在确定系统的响应时间、吞吐量和资源利用率等指标...

    Hibernate 性能优化

    ### Hibernate 性能优化 #### 一、引言 Hibernate 是一款非常强大的对象关系映射(ORM)框架,它能够简化 Java 应用程序与数据库之间的交互过程。然而,对于初次接触 Hibernate 的开发者来说,可能会遇到性能方面...

    优化Hibernate性能的几点建议

    ### 优化Hibernate性能的几点建议 #### 一、调整Fetch Size以提高性能 在使用Hibernate进行数据查询时,Fetch Size的设置对性能有着显著的影响。Fetch Size是指每次从数据库中取出的数据行数,默认情况下,Oracle...

Global site tag (gtag.js) - Google Analytics