【11.0】Hibernate缓存机制(一级和二级缓存)

1、  一级缓存,二级缓存,查询缓存;

2、  一级缓存又称为session缓存。生命周期相同。周期较短。事务级别的缓存。

get使用了一级缓存,用get查数据时,首先检查缓存中是否有该数据,如果有直接从缓存中取数据,如果没有再查询数据库,并且将数据放入缓存中。

load也支持一级缓存。load还支持lazy.当load从数据库中查询数据后,也会将数据放入缓存。

3、  unique/list查询不会去查看缓存,但是list查询的实体对象将会放入缓存中。

4、  iterate会执行查询id的操作,当查询对象时,会检查缓存中是否存在。如果存在则从缓存中取数据。Iterate查询出来的对象也会放入缓存。

5、  管理一级缓存:flush(),clear(),evict()

6、  二级缓存:sessionFactory ;进程级别的缓存。支持集群。

使用步骤:

a)       在hibernate.cfg.xml中开启二级缓存(默认开启)

b)    配置cache.provider_class


<!-- 使用二级缓存  3.x -->

<property name="cache.use_second_level_cache">true</property>

<property name="cache.provider_class">org.hibernate.cache.EhCacheProvider</property>

<!-- 使用二级缓存   4.3-->

<property name="cache.use_second_level_cache">true</property>

<property name="cache.region.factory_class">

org.hibernate.cache.ehcache.EhCacheRegionFactory</property>

c)       导入ehcache.jar

d)       将ehcache.xml放入src下(etc下找)

e)       在类中指定或在(hibernate.cfg.xml)指定


<hibernate-mapping>

<class name="cn.siggy.pojo.Book" table="book" catalog="hibernate4">

<cache usage="read-only"/>

<id name="id" type="java.lang.Integer">

<column name="id" />

<generator class="identity" />

</id>

<property name="author" type="java.lang.String">

<column name="author" />

</property>

<property name="name" type="java.lang.String">

<column name="name" />

</property>

<property name="price" type="java.lang.Double">

<column name="price" precision="22" scale="0" not-null="true" />

</property>

<property name="pubDate" type="java.sql.Timestamp">

<column name="pubDate" length="19" />

</property>

</class>

</hibernate-mapping>

在配置文件中


<class-cache usage="read-only" class="cn.siggy.pojo.Book"/>

f)        使用:


@Test

public void testGet(){

Session session = HibernateUtil.getSession();

Transaction tx = session.beginTransaction();

Book book = (Book)session.get(Book.class, 1);

//发出sql语句取数据

System.out.println(book.getName());

HibernateUtil.closeSession();

session = HibernateUtil.getSession();

System.out.println("---------");

book = (Book)session.get(Book.class, 1);

System.out.println(book.getName());

tx.commit();

HibernateUtil.closeSession();

}

7、  查询缓存:在二级缓存基础来的。

a)         在hibernate.cfg.xml中配置


<!-- 配置使用查询缓存 -->

<property name="cache.use_query_cache">true</property>

b)         使用:

说明:如果有不懂之处,请参考博文http://blog.csdn.net/an_2016/article/details/52088712

时间: 2024-12-24 07:57:33

【11.0】Hibernate缓存机制(一级和二级缓存)的相关文章

mybatis学习--缓存(一级和二级缓存)

声明:学习摘要! MyBatis缓存 我们知道,频繁的数据库操作是非常耗费性能的(主要是因为对于DB而言,数据是持久化在磁盘中的,因此查询操作需要通过IO,IO操作速度相比内存操作速度慢了好几个量级),尤其是对于一些相同的查询语句,完全可以把查询结果存储起来,下次查询同样的内容的时候直接从内存中获取数据即可,这样在某些场景下可以大大提升查询效率. MyBatis的缓存分为两种: 一级缓存,一级缓存是SqlSession级别的缓存,对于相同的查询,会从缓存中返回结果而不是查询数据库 二级缓存,二级

hibernate回顾之缓存机制-一级缓存、二级缓存、查询缓存

在介绍hibernate的缓存机制前,我们先了解一下什么是缓存: 缓存(Cache): 计算机领域非常通用的概念.里面放东西,说白了缓存就是一个集合.它介于应用程序和永久性数据存储源(如硬盘上的文件或者数据库)之间,其作用是降低应用程序直接读写永久性数据存储源的频率,从而提高应用的运行性能.缓存中的数据是数据存储源中数据的拷贝并且缓存的物理介质通常是内存. 了解jdbc的人都知道,当需要连接数据库时,一般都会做一个连接池,那么连接池和缓存有什么区别呢? 相同点:两者都可以是在内存里,实现时一样的

Mybatis(五) 延迟加载和缓存机制(一级二级缓存)

踏踏实实踏踏实实,开开心心,开心是一天不开心也是一天,路漫漫其修远兮. --WH 一.延迟加载 延迟加载就是懒加载,先去查询主表信息,如果用到从表的数据的话,再去查询从表的信息,也就是如果没用到从表的数据的话,就不查询从表的信息.所以这就是突出了懒这个特点.真是懒啊. Mybatis中resultMap可以实现延迟加载 1.1.查询订单信息,延迟加载用户信息,一对一关系. 1.1.1.开启延迟加载 全局配置文件中,settings标签用来设置全局常量的,这里就用到了. 1 <settings>

【Hibernate】一级、二级缓存

本文讲述HIbernate中一级.二级缓存的概念以及如何使用. 一.大纲 2.什么是一级缓存 3.一级缓存示例展示 4.二级缓存以及示例展示 5.总结 二.什么是一级缓存 在hibernate中所谓的一级缓存就是session对象,但是一级缓存对提高性能的作用性并不是很大,其session主要的目的是管理实体对象的状态(临时.离线.持久化). 其缓存模型如下图: 三.一级缓存示例 3.1 查询(get,load, HQL) 3.1.1 get/load方法 @Test public void t

Hibernate 利用缓存(一级、二级、查询)提高系统性能

在hibernate中我们最常用的有三类缓存,分别为一级缓存.二级缓存和查询缓存,下面我们对这三个缓存在项目中的使用以及优缺点分析一下. 缓存它的作用在于提高性能系统性能,介于应用系统与数据库之间而存在于内存或磁盘上的数据. 首先,来看一下一级缓存它默认开启且很常用. 一级缓存 同是一种缓存常常可以有好几个名字,这是从不同的角度考虑的结果,从缓存的生命周期角度来看一级缓存又可以叫做:sessin缓存.线程级缓存.事务级缓存.我们编程中线程.事务.session这三个概念是绑定到一起的放到了thr

hibernate的一级和二级缓存

一级缓存就是Session级别的缓存,close后就没了. 二级缓存就是SessionFactory级别的缓存,全局缓存,要配置其他插件. 什么样的数据适合存放到第二级缓存中? 1.很少被修改的数据 2.不是很重要的数据,允许出现偶尔并发的数据 3.不会被并发访问的数据 4.参考数据 不适合存放到第二级缓存的数据? 1.经常被修改的数据 2.财务数据,绝对不允许出现并发 3.与其他应用共享的数据.         Hibernate的二级缓存策略的一般过程如下: 1) 条件查询的时候,总是发出一

hibernate一级和二级缓存介绍

一级缓存Hibernate缓存包括两大类:Hibernate一级缓存和Hibernate二级缓存Hibernate一级缓存又称为"Session的缓存",它是内置的,不能被卸载(不能被卸载的意思就是这种缓存不具有可选性,必须有的功能,不可以取消session缓在第一级缓存中,持久化类的每个实例都具有唯一的OID存 .在缓存中的对象,具有持久性,session对象负责管理.一级缓存的优点是使用同一个session对象多次查询同一个数据对象,仅对数据库查询一次例如:session.load

Hibernate学习(九)———— 二级缓存和事务级别详讲

序言 这算是hibernate的最后一篇文章了,下一系列会讲解Struts2的东西,然后说完Struts2,在到Spring,然后在写一个SSH如何整合的案例.之后就会在去讲SSM,在之后我自己的个人博客应该也差不多可以做出来了.基本上先这样定下来,开始完成hibernate的东西把.这章结束后,我会将我一些hibernate的资料奉上,供大家一起学习. ---WH 一.概述 这章总的分两大块来讲解, 第一大块,hibernate的事务管理.,对于hibernate的事务管理来说,如果之前学过数

Mybatis 的一级、二级缓存?

1)一级缓存: 基于 PerpetualCache 的 HashMap 本地缓存,其存储作用域为 Session,当 Session flush 或 close 之后,该 Session 中的所有 Cache 就 将清空,默认打开一级缓存. 2)二级缓存与一级缓存其机制相同,默认也是采用 PerpetualCache,HashMap 存储,不同在于其存储作用域为 Mapper(Namespace),并且可自定义存储源, 如 Ehcache.默认不打开二级缓存,要开启二级缓存,使用二级缓存属性类需