- 浏览: 84223 次
- 性别:
- 来自: 上海
文章分类
最新评论
二级缓存也称进程级的缓存或SessionFactory级的缓存,二级缓存可以被所有的session共享
二级缓存的生命周期和SessionFactory的生命周期一致,SessionFactory可以管理二级缓存
二级缓存的配置和使用:
* 将echcache.xml(在etc目录下有模板文件)文件拷贝到src下
* 开启二级缓存,修改hibernate.cfg.xml文件
<property name="hibernate.cache.use_second_level_cache">true</property>
* 指定缓存产品提供商,修改hibernate.cfg.xml文件
<property name="hibernate.cache.provider_class">org.hibernate.cache.EhCacheProvider</property>
* 指定那些实体类使用二级缓存(两种方法)
1 在映射文件中采用<cache>标签
<class name="com.bjsxt.hibernate.Student" table="t_student">
<!--
<cache usage="read-only"/>
-->
<id name="id">
<generator class="native"/>
</id>
<property name="name"/>
<many-to-one name="classes" column="classesid"/>
</class>
2 在hibernate.cfg.xml文件中,采用<class-cache>标签
<session-factory>
<property name="hibernate.connection.url">jdbc:mysql://localhost/hibernate_cache</property>
<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="hibernate.connection.username">root</property>
<property name="hibernate.connection.password">bjsxt</property>
<property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
<property name="hibernate.show_sql">true</property>
<!-- 开启二级缓存 -->
<property name="hibernate.cache.use_second_level_cache">true</property>
<!-- 指定缓存产品提供商 -->
<property name="hibernate.cache.provider_class">org.hibernate.cache.EhCacheProvider</property>
<mapping resource="com/bjsxt/hibernate/Classes.hbm.xml"/>
<mapping resource="com/bjsxt/hibernate/Student.hbm.xml"/>
<class-cache class="com.bjsxt.hibernate.Student" usage="read-only"/>
</session-factory>
二级缓存是缓存实体对象的
二级缓存的管理
SessionFactory factory = HibernateUtils.getSessionFactory();
//factory.evict(Student.class);
factory.evict(Student.class, 1);
了解一级缓存和二级缓存的交互
try {
session = HibernateUtils.getSession();
session.beginTransaction();
//仅向二级缓存读数据,而不向二级缓存写数据
session.setCacheMode(CacheMode.GET);
Student student = (Student)session.load(Student.class, 1);
System.out.println("student.name=" + student.getName());
session.getTransaction().commit();
}catch(Exception e) {
e.printStackTrace();
session.getTransaction().rollback();
}finally {
HibernateUtils.closeSession(session);
}
try {
session = HibernateUtils.getSession();
session.beginTransaction();
//发出sql语句,因为session设置了CacheMode为GET,所以二级缓存中没有数据
Student student = (Student)session.load(Student.class, 1);
System.out.println("student.name=" + student.getName());
session.getTransaction().commit();
}catch(Exception e) {
e.printStackTrace();
session.getTransaction().rollback();
}finally {
HibernateUtils.closeSession(session);
}
try {
session = HibernateUtils.getSession();
session.beginTransaction();
//只向二级缓存写数据,而不从二级缓存读数据
session.setCacheMode(CacheMode.PUT);
//会发出查询sql,因为session将CacheMode设置成了PUT
Student student = (Student)session.load(Student.class, 1);
System.out.println("student.name=" + student.getName());
session.getTransaction().commit();
}catch(Exception e) {
e.printStackTrace();
session.getTransaction().rollback();
}finally {
HibernateUtils.closeSession(session);
}
}
发表评论
-
Fetch抓取策略
2008-12-21 15:30 10591 hibernate抓取策略(单端代理的批量抓取) 保持默 ... -
查询缓存
2008-12-21 13:27 2528查询缓存是针对普通属性结果集的缓存,对实体对象的结果集只缓存i ... -
一级缓存
2008-12-20 21:18 846一级缓存很短和session的生命周期一致,一级缓存也叫ses ... -
HQL 原生SQL查询 外置命名查询 查询过滤器 DML风格的查询
2008-12-20 15:04 1294在hql中关键字不区分大小写,但是属性和类名区分大小写 1、简 ... -
冬夜读书示子律
2008-12-19 16:11 814古人学问无遗力,少壮功夫老始成。 纸上得来终觉浅,绝知此事要躬 ... -
悲观锁与乐观锁
2008-12-19 15:49 759悲观锁 悲观锁的实现,通常依赖于数据库机制,在整个过程中将数据 ... -
Set Map Arrary List 集合映射
2008-12-19 14:50 860<class name="com.bjsxt. ... -
composite 映射
2008-12-19 10:48 782通常将复合主键相关的属性,单独放到一个类中 * 此类必须实现序 ... -
Component 映射
2008-12-19 09:54 682在hibernate中,component是某个实体的逻辑组成 ... -
继承映射
2008-12-18 21:05 868继承映射分为三种: 1 单表继承:每颗类继承树使用一个表(ta ... -
LAZY策略
2008-12-18 14:26 738hibernate lazy策略可以使用在: * <cl ... -
Many-to-Many
2008-12-18 10:36 785hibernate多对多关联映射(单向User----> ... -
one-to-many
2008-12-17 20:19 1062hihernate一对多关联映射 ... -
session --------- flush() 和 evict()
2008-12-17 14:00 2272session flush方法主要做了 ... -
数据库隔离级别
2008-12-17 13:57 822隔离级别 脏读 不可重复读 幻读 R ... -
One-to-one( 2 唯一外键关联)
2008-12-17 11:12 913hibernate一对一唯一外键关联映射(单向关联Person ... -
one-to-one(1主键关联)
2008-12-16 20:23 1780主键关联-----单向 <class name=&qu ... -
many-to-one
2008-12-16 20:15 753<class name="com.bjsx ... -
Hibernate3包问题org/slf4j/impl/StaticLoggerBinder
2008-12-15 13:55 4267Exception in thread "main& ...
相关推荐
"深入理解MyBatis中的一级缓存与二级缓存" MyBatis是一种流行的持久层框架,它提供了缓存机制来提高应用程序的性能。在MyBatis中,有两种类型的缓存:一级缓存和二级缓存。下面我们将深入了解MyBatis中的一级缓存和...
Redis作为二级缓存是数据库系统优化的一个重要策略,特别是在高并发、大数据量的场景下,可以显著提升应用性能。在Mybatis中,二级缓存是一个跨Mapper共享的区域,用于存储查询结果,避免了重复查询数据库,从而降低...
缓存机制分为一级缓存和二级缓存,两者都有助于减少对物理数据库的直接访问,从而提高应用程序的运行效率。 一级缓存是 Hibernate 内置的,默认开启,与 Session 对象关联。它是一个事务范围的缓存,也就是说,每个...
Mybatis-plus基于Redis实现二级缓存过程解析 Mybatis-plus是一款基于Java语言的持久层框架,旨在简化数据库交互操作。然而,在高并发、高性能的应用场景中,数据库的查询操作可能会成为性能瓶颈。为了解决这个问题...
**正文** 在Java持久化框架Hibernate中,缓存机制是...要启用二级缓存,首先需要引入支持二级缓存的插件,如EhCache或Infinispan。然后,在`hibernate.cfg.xml`配置文件中,指定缓存提供者,并开启二级缓存: ```xml ...
本文将详细探讨如何在Spring集成的Hibernate环境中配置二级缓存,以及其背后的原理和实践。 首先,我们需要了解什么是二级缓存。在Hibernate中,一级缓存是每个Session内部的缓存,它自动管理实体的状态,当一个...
在Java的持久化框架Hibernate中,二级缓存是提高数据访问效率的重要机制。它是一种全局共享的、跨会话的数据存储区域,旨在减少对数据库的直接访问,从而降低系统负载,提升性能。在这个"hibernate二级缓存实例"中,...
开启二级缓存后,相同的数据在不同 SqlSession 中查询时,如果一级缓存未命中,则会尝试从二级缓存中获取。二级缓存的生命周期更长,但在并发环境下需要谨慎使用,因为它可能会引发数据不一致的问题。 ### 开启缓存...
**hibernate一级缓存、二级缓存和查询缓存** 在Java的持久化框架Hibernate中,缓存机制是提高应用程序性能的关键要素。缓存能够减少数据库的访问次数,提高数据读取速度,并且在一定程度上降低了系统的负载。本文将...
在本文中,我们将深入探讨如何在Spring Boot 2.1.4.RELEASE项目中结合JPA(Java Persistence API)和Hibernate实现Redis作为二级缓存。首先,我们需要理解这些技术的基本概念。 Spring Boot 是一个用于简化Spring...
Hibernate 二级缓存是针对SessionFactory级别的全局缓存,与一级缓存(Session级别)不同,一级缓存只在单个Session生命周期内有效。二级缓存则允许不同Session之间共享数据,提高了数据访问效率,减少了对数据库的...
本篇文章将深入探讨Hibernate的二级缓存机制,以及如何进行一级缓存与二级缓存的同步,同时还会介绍二级缓存的配置文件设置。 一级缓存是Hibernate默认提供的缓存,每个SessionFactory实例都有一个一级缓存。当对象...
当涉及到高性能、大数据量的应用时,二级缓存的配置就显得尤为重要。二级缓存能够有效地减少对数据库的访问,提高系统的响应速度。下面我们将详细探讨如何为Spring集成的Hibernate配置二级缓存。 首先,我们需要...
在Java的持久化框架Hibernate中,二级缓存是提高应用程序性能的重要工具。它是一个全局共享的、跨会话的缓存,存储了实体对象的副本,以减少对数据库的访问次数,从而提升系统性能。本篇文章将深入探讨Hibernate二级...
在 MyBatis 中,一级缓存和二级缓存是两个重要的性能优化手段,它们可以有效减少对数据库的访问,提高系统的响应速度。下面将详细阐述这两个缓存机制。 ### 一级缓存 一级缓存是 MyBatis 默认开启的本地会话缓存,...
Hibernate二级缓存是一种提高应用程序性能的技术,它将数据存储在SessionFactory级别的缓存中,使得数据可以在不同的Session之间共享。这与一级缓存(Session级别)不同,一级缓存仅存在于单个Session生命周期内,当...
这个"hibernate5.1二级缓存包"应该包含了用于实现二级缓存的相关组件和配置。 二级缓存是相对于一级缓存(Session 缓存)而言的,一级缓存是每个 Hibernate Session 内部的缓存,而二级缓存则是在 SessionFactory ...
缓存是MyBatis性能优化的重要手段,分为一级缓存和二级缓存。在这篇文章中,我们将深入探讨这两个级别的缓存机制及其工作原理。 **一级缓存** 一级缓存是SqlSession级别的缓存,也称为局部缓存。当你执行一个查询...
在IT行业中,二级缓存是一种优化数据库访问性能的重要技术,特别是在使用ORM框架(如Hibernate)、权限管理框架(如Shiro)以及SQL映射框架(如MyBatis)时。二级缓存可以存储经常访问的数据,避免频繁地从数据库中...
标题“Hibernate一级缓存和二级缓存”指的是Hibernate框架中的两种缓存机制,它们是提高数据访问性能的关键要素。一级缓存是Session级别的,而二级缓存是SessionFactory级别的,两者在数据库操作中起到了重要的作用...