1. 在hibernate.fcg.xml配置文件中开启二级缓存:

<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE hibernate-configuration PUBLIC"-//Hibernate/Hibernate Configuration DTD 3.0//EN""http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"><hibernate-configuration><session-factory><property name="connection.driver_class">oracle.jdbc.driver.OracleDriver</property><property name="connection.url">jdbc:oracle:thin:@localhost:1521:orcl</property><property name="connection.username">oa</property><property name="connection.password">oa</property><property name="connection.pool_size">1</property><!-- SQL dialect --><property name="dialect">org.hibernate.dialect.Oracle10gDialect</property><property name="show_sql">true</property><property name="format_sql">true</property><property name="hbm2ddl.auto">update</property><!-- 开启二级缓存 --><property name="hibernate.cache.use_second_level_cache">true</property><!-- 设置二级缓存的实现类 --><property name="hibernate.cache.provider_class">org.hibernate.cache.EhCacheProvider</property><!-- Hibernate4以后都封装到org.hibernate.cache.ehcache.EhCacheRegionFactory --><property name="hibernate.cache.region.factory_class">org.hibernate.cache.ehcache.EhCacheRegionFactory</property><!-- 指定缓存配置文件位置 --><property name="hibernate.cache.provider_configuration_file_resource_path">ehcache.xml</property><!--启动查询缓存,如果想缓存使用findAll、list、iterator、createCriteria、createQuery等方法获得的数据结果集,必须配置此项--><property name="hibernate.cache.use_second_level_cache">true</property><mapping resource="com/huey/entity/mapping/Person.hbm.xml" /></session-factory></hibernate-configuration>

2. 导入二级缓存所需的jar包。以EHCache为例,需导入Hibernate项目路径下的lib\optional\ehcache中的jar包,同时EHCache还依赖于commons-logging和backport-util-concurrent这两个jar包。

3. 对于EHCache缓存,它还需要一个ehcache.xml配置文件:

<?xml version="1.0"?>
<ehcache><diskStore path="java.io.tmpdir"/><defaultCachemaxElementsInMemory="10000"eternal="false"overflowToDisk="true"timeToIdleSeconds="120"timeToLiveSeconds="120"diskPersistent="false"/>
</ehcache>

配置文件中属性的说明:

maxElementsInMemory:设置缓存中最多可放入多少个对象;
eternal:设置缓存是否永久有效;
overflowToDisk:设置当内存中缓存的记录达到maxElementsInMemory时是否被持久化到硬盘中,保存路径由<diskStore.../>元素指定。
timeToIdleSeconds:设置缓存的对象多少秒没有被使用就会被清理掉;
timeToLiveSeconds:设置缓存的对象在过期之前可以缓存多少秒;
diskPersistent:设置在虚拟机重启时是否进行磁盘存储。

4. 设置对哪些实体类、实体的哪些集合属性启用二级缓存。有两种方式:

1) 在持久化映射文件的<class .../>元素或<set.../>、<list .../>等集合元素内使用<cache .../>元素指定缓存策略。

2) 在hibernate.cfg.xml文件中使用<class-cache .../>或<collection-cache .../>元素对指定的持久化类、集合属性启用二级缓存。

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC"-//Hibernate/Hibernate Mapping DTD 3.0//EN""http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"><hibernate-mapping package="com.huey.entity"><class name="Person" table="tab_person"><!-- 指定持久化类Person开启二级缓存,并指定缓存策略为只读策略 --><cache usage="read-only"/><id name="id" column="id"><generator class="sequence"><param name="sequence">PERSON_ID_SEQUENCE</param></generator></id><property name="name" column="name" /><property name="gender" column="gender"/><property name="birthday" column="birthday"/></class>
</hibernate-mapping>

5. 测试用例:

package com.huey.test;import java.util.List;import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
import org.hibernate.service.ServiceRegistryBuilder;
import org.junit.Test;import com.huey.entity.Person;public class PersonTest {private static SessionFactory sf;static {Configuration configuration = new Configuration().configure("hibernate.cfg.xml");ServiceRegistryBuilder srb = new ServiceRegistryBuilder().applySettings(configuration.getProperties());sf = configuration.buildSessionFactory(srb.buildServiceRegistry());}@Testpublic void testPerson() throws Exception {Session session = sf.openSession();session.beginTransaction(); List<?> people = session.createQuery("from Person").list();for (Object object : people) {Person person = (Person)object;System.out.println(person.getName());}session.getTransaction().commit();session.close();Session session2 = sf.openSession();session2.beginTransaction(); Person person = (Person)session2.get(Person.class, 1);System.out.println(person.getName());session2.getTransaction().commit();session2.close();}
}

可以发现,启用二级缓存后,即使session关闭之后,第二个查询仍不需发送SQL查询语句。

Hibernate二级缓存的简单示例相关推荐

  1. hibernate二级缓存(三) 自定义实现一个简单的hibernate二级缓存

    hibernate二级缓存(三) 自定义实现一个简单的hibernate二级缓存 前面我们已经提及过hibernate内部为二级缓存的扩展做了很多的实现.我们只需要实现RegionFactoryTem ...

  2. Hibernate EHCache - Hibernate二级缓存

    Hibernate EHCache - Hibernate二级缓存 欢迎使用Hibernate二级缓存示例教程.今天我们将研究Hibernate EHCache,它是最受欢迎的Hibernate二级缓 ...

  3. HibernateEHCache –Hibernate二级缓存

    Welcome to the Hibernate Second Level Cache Example Tutorial. Today we will look into Hibernate EHCa ...

  4. spring boot集成ehcache 2.x 用于hibernate二级缓存

    spring boot集成ehcache 2x 用于hibernate二级缓存 项目依赖 Ehcache简介 hibernate二级缓存配置 ehcache配置文件 ehcache事件监听 注解方式使 ...

  5. Hibernate二级缓存问题

    相关概念和定义 1.缓存的意义 把一些不常修改,但是又经常用的数据存放到内存中,这样能减少与数据库的交互,提升程序的性能 2.Hibernate中提供了两级缓存: 第一级别的缓存是Session级别的 ...

  6. spring boot 2.1.4 hibernate二级缓存 Hazelcast实现(一)

    Hazelcast优势网上都可以查到,默认的分布式缓存,使用Hazelcast替换ehcache优势比较明显,也方便项目从单机到发展分布式,而不用再引入其他组件也达到了性能要求,按照springboo ...

  7. Hibernate二级缓存详解(转)

    Hibernate二级缓存详解(转) 本文转载 http://www.blogjava.net/supercrsky/articles/238580.html 与Session相对的是,Session ...

  8. Hibernate二级缓存攻略

    Hibernate二级缓存攻略 很多人对二级缓存都不太了解,或者是有错误的认识,我一直想写一篇文章介绍一下hibernate的二级缓存的,今天终于忍不住了. fi9-DVR]   我的经验主要来自hi ...

  9. Hibernate二级缓存的使用

    1启用Hibernate二级缓存 Hibernate二级缓存分为两部分,class缓存和查询缓存,其获取对象的方式有所不同,但两者也有联系,查询缓存必须以class缓存为基础才能起作用,否则只会使效率 ...

最新文章

  1. PIE SDK影像坏线修复
  2. To B 企业在营销、产品、服务端的破局之道
  3. ABI(Application Binary Interface)
  4. python中的内建函数
  5. python3爬取教务系统_python requests模拟登陆正方教务管理系统,并爬取成绩
  6. (21)VHDL实现减法器
  7. c语言实现1024点fft程序,C语言1024点快速傅里叶变换(FFT)程序,最好经过优化,执行速度快...
  8. 软考中级信息安全工程师开编
  9. 克隆硬盘后进不去系统_升级系统盘,迁移系统其实很简单
  10. 如何使用BetterZip的压缩密码管理器?
  11. 爬虫笔记_1、爬虫的五个步骤及举例
  12. VBScript: Windows脚本宿主介绍
  13. 如何用计算机制作海报,稿定设计如何制作海报 一键生成海报的方法
  14. OpenCV4--->基础函数,与操作
  15. html如何制作图片蒙版,如何制作遮罩蒙版手机照片?详细图文教程
  16. android dlna 服务器,安卓手机DLNA功能使用方法
  17. js 获取元素的html代码
  18. oracle左连接应用场景,Oracle左连接left join 的实际操作与应用
  19. (附源码)springboot家庭财务分析系统 毕业设计641323
  20. 谷歌的新系统Fuchsia OS根本不能替代安卓

热门文章

  1. 苹果产品设计中鲜为人知的10个细节
  2. 牧羊少年奇幻之旅读书笔记
  3. 小程序颠覆二次元,随时随地进入漫画世界
  4. 排查mysql CPU使用率高
  5. 模拟人为自动刷视频产品方案
  6. Google三大论文之 - BigTable
  7. 一文教会你如何解决PLC控制回路故障。
  8. 【20140202】曼昆著《经济学原理》读书笔记
  9. 河海大学2015年c语言考试答案,河海大学2010C语言清考试题.doc
  10. 中兴a2018拆机图片_中兴Axon天机做工怎么样 中兴Axon天机拆机图解 (全文)