一级缓存,即session级缓存,是最最重要的,因为它不能够被取消,现在看看二级缓存.
Hibernate二级缓存不是由本身维护的,它是由第三发缓存框架来提供的。看一下如何使用二级缓存:
1、首先要打开二级缓存
<!-- 配置打开二级缓存 -->
<property name="hibernate.cache.use_second_level_cache">true</property>
2、指定缓存提供商。即有谁来提供缓存的功能
<!-- 指定二级缓存的具体实现! -->
<property name="hibernate.cache.provider_class">
org.hibernate.cache.HashtableCacheProvider</property>
3、配置哪些实体类使用哪种缓存策略(只读策略、读写策略等等)
//前两步是hibernate配置文件中配置的,而这一步配置可在某个实体映射文件中进行配置。如下:
<class name="cn.lf.hibernate3.Person" table="t_person">
<cache usage="read-only"/>
<id name="id">
<generator class="native"/>
</id>
//也可以在hibernate配置文件中进行配置,这样的话就不用在映射文件中去修改了,直接改配置文件即可,如下:
<class-cache class="" usage="read-only"/>
//usage:read-write
测试代码如下:
Session session = HibernateUtil.openSession();
try{
session.beginTransaction();
//将发出SQL查询语句查询实体对象的数据
Person p = (Person)session.load(Person.class, 1);
System.out.println(p.getName());
//实体对象已经被缓存,所以下列操作不再发出SQL语句
Person p2 = (Person)session.load(Person.class, 1);
System.out.println(p2.getName());
session.getTransaction().commit();
}catch(Exception e){
e.printStackTrace();
session.getTransaction().rollback();
}finally{
//session关闭之后,当前session对象中的一级缓存已经被清空
session.close();
}
Session session2 = HibernateUtil.openSession();
try{
session2.beginTransaction();
//由于启用了二级缓存,所以实体对象已经被缓存,所以下列操作不再发出SQL语句
Person p = (Person)session2.load(Person.class, 1);
System.out.println(p.getName());
//不再发出SQL语句!
Person p2 = (Person)session2.load(Person.class, 1);
System.out.println(p2.getName());
session2.getTransaction().commit();
}catch(Exception e){
e.printStackTrace();
session2.getTransaction().rollback();
}finally{
session2.close();
}
下面来研究下二级缓存的管理:
Session session = HibernateUtil.openSession();
try{
session.beginTransaction();
//将发出SQL查询语句查询实体对象的数据
Person p = (Person)session.load(Person.class, 1);
System.out.println(p.getName());
//实体对象已经被缓存,所以下列操作不再发出SQL语句
Person p2 = (Person)session.load(Person.class, 1);
System.out.println(p2.getName());
session.getTransaction().commit();
}catch(Exception e){
e.printStackTrace();
session.getTransaction().rollback();
}finally{
//session关闭之后,当前session对象中的一级缓存已经被清空
session.close();
}
Session session2 = HibernateUtil.openSession();
try{
session2.beginTransaction();
session.getSessionFactory().getCache().evictEntityRegion(ContactPerson.class);
//由于清空了二级缓存,所以再次发出SQL语句
Person p = (Person)session2.load(Person.class, 1);
System.out.println(p.getName());
//不再发出SQL语句!
Person p2 = (Person)session2.load(Person.class, 1);
System.out.println(p2.getName());
session2.getTransaction().commit();
}catch(Exception e){
e.printStackTrace();
session2.getTransaction().rollback();
}finally{
session2.close();
}
如果定义二级缓存为只读缓存那么是不允许修改的。
了解下缓存模式,即如何跟二级缓存进行交互:CacheMode
分享到:
相关推荐
Hibernate是一个持久化框架,经常需要访问数据库。如果我们能够降低应用程序对物理数据库访问的频次,那会提供应用程序的运行性能。缓存内的数据是对物理数据源中的数据的复制,应用程序运行时先从缓存中读写数据。
Hibernate是一种面向Java环境的ORM工具。系统地分析了Hibernate的缓存结构,并描述了二级缓存的查询过程、缓存策略;同时总结了二级缓存使用中的一些限制,以及使用二级缓存的优化策略。
NULL 博文链接:https://364232252.iteye.com/blog/2369161
Hibernate允许在类和集合的粒度上设置第二级缓存。在映射文件中,和元素都有一个子元素,这个子元素用来配置二级缓存。 示例:以category(产品类别)和product(产品)的映射为例: 1) 修改要配置缓存的那个持久化类的...
Hibernate中使用了一级缓存和二级缓存的机制来提高程序的性能. 一 为什么要使用缓存? 缓存是一块存储区域,可能是一块内存,也可能是一块硬盘.缓存能起到缓冲的作用,把程序经常使用...
doc格式。当多个并发的事务同时访问持久化层的缓存的相同数据时,会引起并发...在进程范围或集群范围的缓存,即第二级缓存,会出现并发问题。因此可以设定四种类型的并发访问策略,每一种策略对应一种事务隔离级别。
有很多人认为Hibernate天生效率比较低,确实,在...特别是应用二级缓存之后,甚至可以获得比较不使用缓存的JDBC更好的性能,下面介绍一些通常的 Hibernate的优化策略: 1.抓取优化 2.二级缓存 3.批量数据操作 4.杂项
NULL 博文链接:https://microjava.iteye.com/blog/525981
Hibernate 学习笔记 get和load的区别 一对一,一对多,多对多 悲观锁,乐观锁 hibernate查询语言hql hibernate一级缓存、二级缓存 抓取策略
目录 课程内容 1 HelloWorld 2 Hibernate原理模拟 - 什么是O/R Mapping以及为什么... 4 一级缓存和二级缓存和査询缓存(面试题)(详见hibernate_3000_Hibernate_3KindsOf_Cache) 5 事务并发处理(面试的意义更大)
Hibernate 学习笔记 Hibernate 学习笔记 1 ...hibernate二级缓存 47 Hibernate Gossip: 二级快取(Second-level) 48 hibernate查询缓存 50 hibernate抓取策略 53 Hibernate最佳实践(Best Practices) 55
hibernate.cfg.xml配置,hbm.xml映射文件详解,主键生成策略使用,PO对象状态及状态的转换分析、一级缓存,Hibernate数据检索技术,Hibernate高级映射技术,Hibernate多表联合查询, Hibernate二级缓存技术,...
系统学习Hibernate3的开发知识,循序渐进 ... 包括:抓取策略、集合的性能、二级缓存、查询缓存、管理缓存 第七章:基本实现原理 包括:分增删改查的操作说明Hibernate基本的实现原理 第八章:最佳实践
3.4.4. 二级缓存与查询缓存 3.4.5. 查询语言中的替换 3.4.6. Hibernate的统计(statistics)机制 3.5. 日志 3.6. 实现NamingStrategy 3.7. XML配置文件 3.8. J2EE应用程序服务器的集成 3.8.1. 事务策略配置 ...
22.4 管理Hibernate的第二级缓存 22.4.1 配置进程范围内的第二级缓存 22.4.2 配置集群范围内的第二级缓存 22.4.3 在应用程序中管理第二级缓存 22.4.4 Session与第二级缓存的交互模式 22.5 运行本章的...
内容涵盖安装 Hibernatetools 插件、Session 核心方法、持久化对象生命周期、对象关系映射(1-n、1-1、n-n、继承映射)、检索策略、检索方式(对象导航图、OID 检索、HQL、QBC、本地SQL)、Hibernate 一\二级缓存、...
3.4.4. 二级缓存与查询缓存 3.4.5. 查询语言中的替换 3.4.6. Hibernate的统计(statistics)机制 3.5. 日志 3.6. 实现NamingStrategy 3.7. XML配置文件 3.8. J2EE应用程序服务器的集成 3.8.1. 事务策略配置 ...
3.4.4. 二级缓存与查询缓存 3.4.5. 查询语言中的替换 3.4.6. Hibernate的统计(statistics)机制 3.5. 日志 3.6. 实现NamingStrategy 3.7. XML配置文件 3.8. J2EE应用程序服务器的集成 3.8.1. 事务策略配置 ...
hibernate.cfg.xml配置,hbm.xml映射文件详解,主键生成策略使用,PO对象状态及状态的转换分析、一级缓存,Hibernate数据检索技术,Hibernate高级映射技术,Hibernate多表联合查询, Hibernate二级缓存技术,...
Redis作为hibernate的二级缓存策略,提供所需的jar包,亲自测试过可用。包含了hibernate-redis-2.3.2.jar、redisson-2.5.1.jar等