Hibernate 4.2里面的缓存
1、 hibernate 里面的缓存分成一级缓存与二级缓存与查询缓存
- 一级缓存:Session级别的缓存
- 二级缓存:SessionFactory级别的缓存
- 查询缓存
2、 一级缓存
@Test
public void testCache() {
Session s = sf.getCurrentSession();
s.beginTransaction();
Category c = (Category)s.load(Category.class, 1);
System.out.println(c.getName());
Category c1 = (Category)s.load(Category.class, 1);
System.out.println(c1.getName());
s.getTransaction().commit();
Session s2 = sf.getCurrentSession();
s2.beginTransaction();
Category c2 = (Category)s2.load(Category.class, 1);
System.out.println(c2.getName());
s2.getTransaction().commit();
}
在不使用二级缓存的情况下,如果在一个Session里面对一个对象进行Load两次,那么只查询一次,如果在不同的Session里面各Load一次,会进行两次查询,也就是第二个Session不能访问第一个Session的缓存
3、 二级缓存(在Hibernate里面使用二级缓存)
(一) 导入相应的Jar包
- ehcache-core-2.4.3.jar
- hibernate-ehcache-4.2.0.Final.jar
- slf4j-api-1.6.1.jar
(二) 打开缓存设置,并以EhCache为例子进行实验
<property name="hibernate.cache.use_second_level_cache">true</property>
<property name="cache.region.factory_class">org.hibernate.cache.ehcache.EhCacheRegionFactory</property>
(三) 设置缓存对象,在Category类上面加上注解@Cache
@Cache(usage=CacheConcurrencyStrategy.READ_ONLY)
public class Category {
(四) 对二级缓存进行测试,此时在两个不同的Session里面进行Load也只会查询一次
@Test
public void testCache2() {
Session s = sf.getCurrentSession();
s.beginTransaction();
Category c = (Category)s.load(Category.class, 1);
System.out.println(c.getName());
s.getTransaction().commit();
Session s2 = sf.getCurrentSession();
s2.beginTransaction();
Category c2 = (Category)s2.load(Category.class, 1);
System.out.println(c2.getName());
s2.getTransaction().commit();
}
4、 查询缓存
- 设置查询缓存,查询缓存是以二级缓存为基础
<!-- 启用查询缓存 -->
<property name="hibernate.cache.use_query_cache">true</property>
- 查询测试(必须使用setCacheable(true)方法)
@Test
public void testQueryCache() {
Session s = sf.getCurrentSession();
s.beginTransaction();
List<Category> cs = (List<Category>)s.createQuery("from Category").setCacheable(true).list();
for(Category c : cs) {
System.out.println(c.getName());
}
List<Category> cs2 = (List<Category>)s.createQuery("from Category").setCacheable(true).list();
for(Category c : cs2) {
System.out.println(c.getName());
}
s.getTransaction().commit();
Session s2 = sf.getCurrentSession();
s2.beginTransaction();
List<Category> cs3 = (List<Category>)s2.createQuery("from Category").setCacheable(true).list();
for(Category c : cs3) {
System.out.println(c.getName());
}
s2.getTransaction().commit();
}
分享到:
相关推荐
在Java的持久化框架Hibernate中,二级缓存是提高数据访问效率的重要机制。它是一种全局共享的、跨会话的数据存储区域,旨在减少对数据库的直接访问,从而降低系统负载,提升性能。在这个"hibernate二级缓存实例"中,...
总结来说,Hibernate 的一级缓存和二级缓存都是为了提高数据访问效率,但它们在范围和并发控制方面有所不同。一级缓存是事务级别的,保证了数据的强一致性,而二级缓存提供了更多的灵活性,可以跨事务共享,但需要...
Hibernate二级缓存是一种提高应用程序性能的技术,它将数据存储在SessionFactory级别的缓存中,使得数据可以在不同的Session之间共享。这与一级缓存(Session级别)不同,一级缓存仅存在于单个Session生命周期内,当...
**hibernate二级缓存详解** Hibernate作为Java领域中广泛使用的对象关系映射(ORM)框架,极大地简化了数据库操作。然而,在处理大量数据时,性能优化显得尤为重要,这就是二级缓存的作用。本文将深入探讨Hibernate...
Hibernate 二级缓存是针对SessionFactory级别的全局缓存,与一级缓存(Session级别)不同,一级缓存只在单个Session生命周期内有效。二级缓存则允许不同Session之间共享数据,提高了数据访问效率,减少了对数据库的...
**hibernate一级缓存、二级缓存和查询缓存** 在Java的持久化框架Hibernate中,缓存机制是提高应用程序性能的关键要素。缓存能够减少数据库的访问次数,提高数据读取速度,并且在一定程度上降低了系统的负载。本文将...
本篇文章将深入探讨Hibernate的二级缓存机制,以及如何进行一级缓存与二级缓存的同步,同时还会介绍二级缓存的配置文件设置。 一级缓存是Hibernate默认提供的缓存,每个SessionFactory实例都有一个一级缓存。当对象...
Hibernate二级缓存是Java开发中使用Hibernate框架进行数据持久化时优化性能的一种重要技术。它在一级缓存(Session级别的缓存)的基础上,提供了一个全局的、跨会话的数据存储层,可以显著减少对数据库的访问,从而...
《Hibernate Validator参考指南4.2Final详解》 Hibernate Validator,作为Java Bean Validation规范的实现,是Hibernate项目的一个重要组成部分,它提供了一套强大的数据验证框架,使得开发者在处理业务逻辑时能够...
在本文中,我们将深入探讨如何在Spring Boot 2.1.4.RELEASE项目中结合JPA(Java Persistence API)和Hibernate实现Redis作为二级缓存。首先,我们需要理解这些技术的基本概念。 Spring Boot 是一个用于简化Spring...
Hibernate 二级缓存是一种高效的数据存储机制,它能够显著提升Web应用的性能,尤其是在处理大量数据流动时。缓存的主要目标是减少应用与数据库之间的交互次数,从而降低延迟并减轻数据库服务器的压力。在Hibernate...
Hibernate 二级缓存
标题“Hibernate一级缓存和二级缓存”指的是Hibernate框架中的两种缓存机制,它们是提高数据访问性能的关键要素。一级缓存是Session级别的,而二级缓存是SessionFactory级别的,两者在数据库操作中起到了重要的作用...
二级缓存是 Hibernate 缓存策略的一部分,它在应用程序的多个会话之间共享数据,进一步优化了数据库访问效率。 二级缓存分为以下关键知识点: 1. **一级缓存与二级缓存的区别**: - 一级缓存:每个 Hibernate ...
**Hibernate 二级缓存总结整理** 在Java的持久化框架中,Hibernate是一个广泛使用的ORM(对象关系映射)工具,它极大地简化了数据库操作。在处理大数据量或高并发的场景下,为了提高性能和减少数据库负载,...
以EhCache为例,我们需要在项目中引入ehcache-core或ehcache的依赖,并在Hibernate配置文件(hibernate.cfg.xml或persistence.xml)中启用二级缓存,添加如下配置: ```xml <property name="hibernate.cache.use_...
在Java的持久化框架Hibernate中,二级缓存是提高数据访问效率的重要机制。它能够将经常访问的数据存储在服务器内存中,减少对数据库的直接访问,从而提升系统性能。本篇将详细介绍Hibernate二级缓存的概念、作用以及...
2. **配置Hibernate**:在Hibernate的配置文件`hibernate.cfg.xml`中启用二级缓存并指定缓存提供商。以下是一个使用Ehcache的示例: ```xml <property name="hibernate.cache.use_second_level_cache">true ...
在Java的持久化框架Hibernate中,二级缓存是提高应用程序性能的重要工具。它是一个全局共享的、跨会话的缓存,存储了实体对象的副本,以减少对数据库的访问次数,从而提升系统性能。本篇文章将深入探讨Hibernate二级...
本篇将深入探讨Hibernate的一级缓存和二级缓存,以及查询缓存的配置和使用。 ### 一级缓存 一级缓存是Hibernate默认提供的缓存,它是Session级别的,每个Hibernate Session都有一个私有的、本地的一级缓存。当我们...