一. 什么是缓存
缓存是位于应用程序与物理数据源之间,用于临时存放复制数据的内存区域,目的是为了减少应用程序对物理数据源访问的次数,从而提高应用程序的运行性能.
Hibernate在查询数据时,首先到缓存中去查找,如果找到就直接使用,找不到的时候就会从物理数据源中检索,所以,把频繁使用的数据加载到缓存区后,就可以大大减少应用程序对物理数据源的访问,使得程序的运行性能明显的提升.
二. Hibernate缓存分类
1.Session缓存
被称为一级缓存,它是hibernate的内置缓存,不能被卸载,并且每个session对应自己的缓存,不能跨越session进行该级别的缓存。 举例:在一个session中 , 使用get(***.class, id) 连续执行N次(id相同),只会执行一次数据库查询。但但跨session后, 则会被执行多次。
2.SessionFactory缓存
SessionFactory的缓存分为内置缓存和外置缓存,跨session级别.
1).内置缓存 存放的是SessionFactory对象的一些集合属性包含的数据(映射元素据及预定义SQL语句等),对于应用程序来说,它是只读的.
2).外置缓存 被称为二级缓存,存放的是数据库数据的副本。二级缓存除了以内存作为存储介质外,还可以选用硬盘等外部存储设备.
3. 无论是一级缓存, 还是二级缓存,都是只缓存实体对象的,只是二者的周期不同罢了。 支持一级缓存和二级缓存的方法有 get(), load(), iterate(查询实体对象),,其中 Query 和Criteria的list() 只会缓存,但不会使用缓存(除非结合查询缓存)。
4.什么样的数据适合放在二级缓存中?
1).很少被修改的数据;
2).不是很重要的数据,允许出现偶尔并发的数据(重要数据:金融账户数据);
3).不会被并发访问的数据;
4).参考数据,指的是供应用参考的常量数据,它的实例数目有限,它的实例会被许多其他类的实例引用,实例极少或者从来不会被修改。
5.什么样的数据不适合放到二级缓存中?
1).经常被修改的数据;
2).财务数据,绝对不允许出现并发;
3).与其他应用共享的数据。
6.二级缓存策略的一般过程
1):条件查询的时候,总是发出一条select * from table_name where …. (选择所有字段)这样的SQL句查询数据库,一次获得所有的数据对象(这个问题要考虑,如果你查询十万条数据时,内存不是被占用)。
2):把获得的所有数据对象根据ID放入到第二级缓存中。
3):当Hibernate根据ID访问数据对象的时候,首先从Session一级缓存中查;查不到,如果配置了二级缓存,那么从二级缓存中查;查不到,再查询数据库,把结果按照ID放入到缓存。
4):删除、更新、增加数据的时候,同时更新缓存。
三. 二级缓存配置
Hibernate二级缓存要通过插件来实现,Hibernate提供了org.hibernate.cache.CacheProvider借口,它充当缓存插件与Hibernate之间的适配器 . 常用的二级缓存插件
EHCache org.hibernate.cache.EhCacheProvider
OSCache org.hibernate.cache.OSCacheProvider
SwarmCahe org.hibernate.cache.SwarmCacheProvider
JBossCache org.hibernate.cache.TreeCacheProvider
其中Ehcache的配置方法
1). 将echcache.xml文件拷贝到src下
2). 配置文件
hibernate.cfg.xml 方式
<property name="hibernate.cache.provider_class">org.hibernate.cache.EhCacheProvider</property> <property name="hibernate.cache.use_second_level_cache">true</property> <!-- 开启二级缓存 -->
Spring
<prop key="hibernate.cache.provider_class">org.hibernate.cache.EhCacheProvider</prop> <prop key="hibernate.cache.use_second_level_cache">true</prop> <!-- 开启二级缓存 -->
四.查询缓存
查询缓存是针对普通属性结果集的缓存,对实体对象的结果集只缓存id(其ID不是对象的真正ID,它与查询的条件相关即where后的条件相关,不同的查询条件,其缓存的id也不一样),查询缓存的生命周期,当前关联的表发生修改或是查询条件改变时,那么查询缓存生命周期结束,它不受一级缓存和二级缓存的生命周期的影响。但最好要配合二级缓存的使用。 开启查询缓存的方式
1).cfg.xml
<property name="hibernate.cache.use_query_cache">true</property>
2).spring
<prop key="hibernate.cache.use_query_cache">true</prop> <!-- 开启查询缓存 -->
在程序中,必须手动开启查询缓存, 如 query.setCacheable(true);
其中 Query 的list() 就可利用到查询缓存了。
注意事项:
1.使用缓存时, 要对Entity进行配置
如若是注解方式 需配置
@Cache(usage=CacheConcurrencyStrategy.READ_ONLY)
若是hbm.xml映射方式, 需配置("read-only" 缓存策略)
<cache usage="read-only"/>
也可在hibernate cfg.xml 文件中配置
<class-cache class="com.tcs.Classes" usage="read-only" />
2.get和load都可以使用二级缓存, createSqlQuery执行的sql查询,无法使用查询缓存
相关推荐
Hibernate学习笔记整理 以下是 Hibernate 框架的详细知识点: Hibernate 介绍 Hibernate 是一个 ORM(Object-Relational Mapping)框架,用于将 Java 对象映射到数据库表中。它提供了一个简洁的方式来访问和操作...
【hibernate个人学习笔记完整版】是一份详尽的资料,涵盖了Hibernate框架的基础到高级应用,旨在帮助学习者深入理解和掌握这一强大的Java对象关系映射(ORM)工具。Hibernate作为Java开发中的主流ORM框架,它极大地...
《Hibernate学习笔记特别详细》 Hibernate,作为一款开源的Object-Relational Mapping(ORM)框架,为Java开发者提供了强大的数据库操作支持。它简化了数据库访问的复杂性,使得开发人员可以像操作对象一样操作...
【一、O/R Mapping】 O/R Mapping,即对象关系映射,是将对象模型与关系数据库之间进行映射的技术。在Hibernate中,O/R Mapping允许开发者以面向对象的方式...学习和掌握Hibernate有助于提升Java应用的数据管理能力。
《Hibernate3.2学习笔记详解》 在Java开发中,ORM(Object-Relational Mapping)框架如Hibernate极大地简化了数据库操作,使得开发者可以更加专注于业务逻辑而不是底层的数据存取。本篇学习笔记将深入探讨Hibernate...
《传智播客2016 Hibernate框架学习笔记》是一份详实的教程,旨在帮助初学者和进阶者深入理解和掌握Hibernate框架。该资源包含了四天的学习内容,分别是day01、day02、day03和day04,涵盖了从基础到高级的多个主题。...
### hibernate框架学习笔记整理 #### 一、Hibernate框架简介 **Hibernate框架**是一种用于Java应用的**对象关系映射**(Object-Relational Mapping, ORM)解决方案,它允许开发者使用面向对象的方式操作数据库中的表...
《Hibernate Annotation 学习笔记》 在Java的持久化框架中,Hibernate以其强大的功能和易用性成为开发者首选之一。而Hibernate Annotation则是Hibernate提供的一种基于注解的实体映射方式,它极大地简化了传统XML...
**hibernate 3.3学习笔记** 在深入探讨Hibernate 3.3的学习笔记之前,首先需要理解Hibernate是什么。Hibernate是一个强大的开源Java持久化框架,它简化了数据库操作,允许开发者将精力集中在业务逻辑上而不是数据库...
【hibernate-学习笔记】 Hibernate 是一个强大的Java对象关系映射(ORM)框架,它为开发者提供了在Java应用程序中管理关系数据库数据的便捷方式。本学习笔记将深入探讨Hibernate的核心概念、配置、实体映射、查询...
《邹波老师Hibernate教程学习笔记》是针对Java开发者深入理解并掌握ORM框架Hibernate的重要参考资料。这是一份由个人在观看邹波老师的Hibernate视频教程后精心整理的学习笔记,旨在帮助初学者和有一定基础的程序员更...
**hibernate入门学习笔记+源码** **一、Hibernate简介** Hibernate是一个开源的对象关系映射(ORM)框架,它简化了Java应用与数据库之间的交互。通过提供对象化的数据访问方式,Hibernate消除了传统JDBC代码中的...
在这个学习笔记中,我们将深入探讨Hibernate4的二级缓存机制、访问策略以及一些主要的新特性。 **1. 二级缓存分类** Hibernate的二级缓存将不同类型的实体分开存储,这有助于优化性能和内存管理: - **单个实体**...
【hibernate框架开发2016版视频 四天学习笔记完整版】 在软件开发领域,特别是Java Web开发中,Hibernate是一个非常重要的对象关系映射(ORM)框架,它极大地简化了数据库操作,使开发者可以更专注于业务逻辑而不是...
【Hibernate 学习笔记】 Hibernate 是一款开源的对象关系映射(ORM)框架,它为 Java 开发者提供了在关系数据库和面向对象编程之间的一个抽象层。这个框架使得开发者可以使用面向对象的方式来操作数据库,而无需...
**Hibernate学习笔记与总结** Hibernate 是一款开源的对象关系映射(ORM)框架,它为Java开发者提供了一种在关系数据库上操作对象数据的便捷方式。本文将深入探讨Hibernate的核心概念、配置、实体类、映射文件、...
**标题:** Hibernate 4 学习笔记 **概述:** Hibernate 4 是一个流行的Java对象关系映射(ORM)框架,它允许开发人员在Java应用中处理数据库操作,而无需直接编写SQL语句。这个学习笔记将深入探讨Hibernate 4的核心...
通过深入学习和实践这个“hibernate 个人学习笔记及代码”包,初学者可以掌握Hibernate的基础知识和实战技能,为Java开发中的数据库操作打下坚实基础。在学习过程中,建议结合实际项目进行练习,以便更好地理解和...
“Hibernate3学习笔记(一)-hibernate概述和简单实例入门” 这个标题表明了本文档将介绍的是关于Hibernate3的基本概念和初步应用。Hibernate3是Java开发中的一个流行对象关系映射(ORM)框架,它简化了数据库操作,将...