Hibernate二级缓存的简单示例
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二级缓存的简单示例相关推荐
- hibernate二级缓存(三) 自定义实现一个简单的hibernate二级缓存
hibernate二级缓存(三) 自定义实现一个简单的hibernate二级缓存 前面我们已经提及过hibernate内部为二级缓存的扩展做了很多的实现.我们只需要实现RegionFactoryTem ...
- Hibernate EHCache - Hibernate二级缓存
Hibernate EHCache - Hibernate二级缓存 欢迎使用Hibernate二级缓存示例教程.今天我们将研究Hibernate EHCache,它是最受欢迎的Hibernate二级缓 ...
- HibernateEHCache –Hibernate二级缓存
Welcome to the Hibernate Second Level Cache Example Tutorial. Today we will look into Hibernate EHCa ...
- spring boot集成ehcache 2.x 用于hibernate二级缓存
spring boot集成ehcache 2x 用于hibernate二级缓存 项目依赖 Ehcache简介 hibernate二级缓存配置 ehcache配置文件 ehcache事件监听 注解方式使 ...
- Hibernate二级缓存问题
相关概念和定义 1.缓存的意义 把一些不常修改,但是又经常用的数据存放到内存中,这样能减少与数据库的交互,提升程序的性能 2.Hibernate中提供了两级缓存: 第一级别的缓存是Session级别的 ...
- spring boot 2.1.4 hibernate二级缓存 Hazelcast实现(一)
Hazelcast优势网上都可以查到,默认的分布式缓存,使用Hazelcast替换ehcache优势比较明显,也方便项目从单机到发展分布式,而不用再引入其他组件也达到了性能要求,按照springboo ...
- Hibernate二级缓存详解(转)
Hibernate二级缓存详解(转) 本文转载 http://www.blogjava.net/supercrsky/articles/238580.html 与Session相对的是,Session ...
- Hibernate二级缓存攻略
Hibernate二级缓存攻略 很多人对二级缓存都不太了解,或者是有错误的认识,我一直想写一篇文章介绍一下hibernate的二级缓存的,今天终于忍不住了. fi9-DVR] 我的经验主要来自hi ...
- Hibernate二级缓存的使用
1启用Hibernate二级缓存 Hibernate二级缓存分为两部分,class缓存和查询缓存,其获取对象的方式有所不同,但两者也有联系,查询缓存必须以class缓存为基础才能起作用,否则只会使效率 ...
最新文章
- PIE SDK影像坏线修复
- To B 企业在营销、产品、服务端的破局之道
- ABI(Application Binary Interface)
- python中的内建函数
- python3爬取教务系统_python requests模拟登陆正方教务管理系统,并爬取成绩
- (21)VHDL实现减法器
- c语言实现1024点fft程序,C语言1024点快速傅里叶变换(FFT)程序,最好经过优化,执行速度快...
- 软考中级信息安全工程师开编
- 克隆硬盘后进不去系统_升级系统盘,迁移系统其实很简单
- 如何使用BetterZip的压缩密码管理器?
- 爬虫笔记_1、爬虫的五个步骤及举例
- VBScript: Windows脚本宿主介绍
- 如何用计算机制作海报,稿定设计如何制作海报 一键生成海报的方法
- OpenCV4--->基础函数,与操作
- html如何制作图片蒙版,如何制作遮罩蒙版手机照片?详细图文教程
- android dlna 服务器,安卓手机DLNA功能使用方法
- js 获取元素的html代码
- oracle左连接应用场景,Oracle左连接left join 的实际操作与应用
- (附源码)springboot家庭财务分析系统 毕业设计641323
- 谷歌的新系统Fuchsia OS根本不能替代安卓