配置Hibernate4二级缓存提升查询性能

HibernateJDBC程序要稍慢一点,但是如果用好Hibernate,性能还是可以接近JDBC的,在Hibernate中,可以使用二级缓存来提升Hibernate的查询性能,二级缓存采用ehcache框架开发,ehcache框架是开源社区很火的一个缓存框架,亚马逊将ehcache开发成了分布式的缓存架构,在hibernate中依然采用的是本机模式缓存,使用缓存可以提高Hibernate的性能,当数据在缓存中存在时,则从缓存中提取数据,如果不存在,则从数据库中查询数据。缓存不适合在变化频繁的场合使用,否则可能会影响查询效率。配置Hibernate缓存的步骤如下:

第一步:如果是单独的Hibernate.cfg.xml文件,则增加如下配置:

 

  <property name="current_session_context_class">thread</property>
  <property name="cache.use_query_cache">true</property>
  <property name="cache.use_second_level_cache">true</property>
  <property name="cache.use_structured_entries">true</property>
  <property name="cache.region.factory_class">org.hibernate.cache.EhCacheRegionFactory</property>
  <property name="net.sf.ehcache.configurationResourceName">/hibernate-config/ehcache.xml</property>


 

如果是使用Spring管理Hibernate,则在ApplicationContext.xml文件中,增加如下配置:

<prop key="hibernate.current_session_context_class">thread</prop>
  <prop key =" hibernate.cache.use_query_cache">true</prop>
  <prop key =" hibernate.cache.use_second_level_cache">true</prop>
  <prop key =" hibernate.cache.use_structured_entries">true</prop>
  <prop key=" hibernate.cache.region.factory_class">org.hibernate.cache.EhCacheRegionFactory</prope>
  <prop key=" hibernate.net.sf.ehcache.configurationResourceName">/hibernate-config/ehcache.xml</prop>


 

第二步:配置ehcache缓存配置文件

<ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../main/config/ehcache.xsd" name="tc" updateCheck="false">
    <defaultCache
        maxElementsInMemory="30000" eternal="true" overflowToDisk="false">
    </defaultCache>
</ehcache>


 

第三步:在Hibernate查询中设置缓存查询

List blogs = sess.createQuery("from Blog blog where blog.blogger = :blogger")
        .setEntity("blogger", blogger)
        .setMaxResults(15)
        .setCacheable(true)
      .list()

           或者在POJO中加上JPA注解

@Entity 
@Cacheable
@Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE)


 

一对多的查询缓存

@OneToMany(cascade=CascadeType.ALL, fetch=FetchType.EAGER)
@JoinColumn(name="CUST_ID")
@Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE)
public SortedSet<Ticket> getTickets() {
    return tickets;
}


第四步:验证Hibernate是否从缓存中获取数据,在Log4j中加上以下代码可以看到Hibernate从缓存中查询数据,注意,以下配置需要使用slf4j的JAR包

log4j.logger.org.hibernate=debug



 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

lishengbo

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值