`
awfrun
  • 浏览: 82497 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

Hibernate-------一级缓存/二级缓存/查询缓存

阅读更多

例子:

model:

 

@Entity
//@BatchSize(size=5)
@Cache(usage=CacheConcurrencyStrategy.READ_WRITE)
public class Category {
	
	
	private int id;
	private String name;
	@Id
	@GeneratedValue
	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	
	

}

 

 

测试:

 

package com.hibernate.test;

import java.util.Date;
import java.util.Iterator;
import java.util.List;

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.annotations.Cache;
import org.hibernate.annotations.CacheConcurrencyStrategy;
import org.hibernate.cfg.AnnotationConfiguration;
import org.hibernate.tool.hbm2ddl.SchemaExport;
import org.junit.AfterClass;
import org.junit.BeforeClass;
import org.junit.Test;

import com.hibernate.model.Category;
import com.hibernate.model.Topic;

public class HQLTest {

	private static SessionFactory sf = null;

	@BeforeClass
	public static void beforeClass() {
		// new SchemaExport(new
		// AnnotationConfiguration().configure()).create(false, true);
		sf = new AnnotationConfiguration().configure().buildSessionFactory();
	}

	@AfterClass
	public static void afterClass() {
		sf.close();
	}

	@Test
	public void testSchemaExport() {
		new SchemaExport(new AnnotationConfiguration().configure()).create(
				false, true);
		
		
	}

	public static void main(String[] args) {
//		new HQLTest().testSchemaExport();
		HQLTest t =	new HQLTest();
		t.beforeClass();
		t.testCache2();
		
	}
	
	
	@Test
	public void testSave() {
		Session session = sf.openSession();
		session.beginTransaction();
		
		for(int i=0; i<10; i++) {
			Category c = new Category();
			c.setName("c" + i);
			Topic t = new Topic();
			t.setCategory(c);
			t.setTitle("t" + i);
			t.setCreateDate(new Date());
			session.save(c);
			session.save(t);
		}
			
		session.getTransaction().commit();
		session.close();
	}
	
	
	
	//一级缓存
	//只会发出一条查询语句
	@Test
	public void testCache1() {
		Session session = sf.openSession();
		session.beginTransaction();
		Category c = (Category)session.load(Category.class, 1);
		System.out.println(c.getName());
		
		Category c2 = (Category)session.load(Category.class, 1);
		System.out.println(c2.getName());
		session.getTransaction().commit();
		session.close();
		
	}
	
	
	
	/**
	 * 二级缓存
	 * 默认情况会发两条查询语句
	 * 
	 * 设置二级缓存,加入包ehcache-1.2.3.jar,在发行包中(还有另外几种二级缓存的实现厂家)
	 * 
	 * 加入配置文件ehcache.xml,加入commons-logging-1.1.1.jar包
	 * 
	 * 更改hibernate.hbm.xml文件
	 * <property name="cache.use_second_level_cache">true</property>
	 *<property name="cache.provider_class">org.hibernate.cache.EhCacheProvider</property>
	 *<property name="cache.use_query_cache">true</property>
	 *
	 *在Category类中加入注解, 	@Cache(usage=CacheConcurrencyStrategy.READ_WRITE)
	 *
	 *可以了,现在利用了二级缓存,只发出一条查询语句
	 */
	
	@Test
	public void testCache2() {
		Session session = sf.openSession();
		session.beginTransaction();
		Category c = (Category)session.load(Category.class, 1);
		System.out.println(c.getName());
		
		
		session.getTransaction().commit();
		session.close();
		
		Session session2 = sf.openSession();
		session2.beginTransaction();
		Category c2 = (Category)session2.load(Category.class, 1);
		System.out.println(c2.getName());
		
		
		session2.getTransaction().commit();
		session2.close();
	}
	
	
	/**
	 * 查询缓存,查询条件一样 
	 * 设置.setCacheable(true)
	 */
	
	@Test
	public void testQueryCache3() {
		Session session = sf.openSession();
		session.beginTransaction();
		List<Category> categories = (List<Category>)session.createQuery("from Category")
									.setCacheable(true).list();
		
		
		
		session.getTransaction().commit();
		session.close();
		
		Session session2 = sf.openSession();
		session2.beginTransaction();
		List<Category> categories2 = (List<Category>)session2.createQuery("from Category")
		.setCacheable(true).list();
		
		session2.getTransaction().commit();
		session2.close();
	}
		
	
}










 

 

 

 

 

 缓存策略提供商(Cache Providers)

Cache Provider class Type Cluster Safe Query Cache Supported
Hashtable (not intended for production use) org.hibernate.cache.HashtableCacheProvider memory   yes
EHCache org.hibernate.cache.EhCacheProvider memory, disk   yes
OSCache org.hibernate.cache.OSCacheProvider memory, disk   yes
SwarmCache org.hibernate.cache.SwarmCacheProvider clustered (ip multicast) yes (clustered invalidation)  
JBoss Cache 1.x org.hibernate.cache.TreeCacheProvider clustered (ip multicast), transactional yes (replication) yes (clock sync req.)
JBoss Cache 2 org.hibernate.cache.jbc2.JBossCacheRegionFactory clustered (ip multicast), transactional yes (replication or invalidation) yes (clock sync req.)
分享到:
评论

相关推荐

    hibernate-configuration-3.0.dtd、hibernate-mapping-3.0.dtd

    此外,`hibernate-configuration-3.0.dtd`还定义了如何设置JNDI数据源,以及如何启用二进制日志、SQL查询统计等功能。 接下来,我们转向`hibernate-mapping-3.0.dtd`。这个文件定义了Hibernate映射文件的语法规则,...

    day37 05-HIbernate二级缓存:一级缓存更新同步到二级缓存及二级缓存配置文件

    本篇文章将深入探讨Hibernate的二级缓存机制,以及如何进行一级缓存与二级缓存的同步,同时还会介绍二级缓存的配置文件设置。 一级缓存是Hibernate默认提供的缓存,每个SessionFactory实例都有一个一级缓存。当对象...

    hibernate一级缓存、二级缓存和查询缓存

    **hibernate一级缓存、二级缓存和查询缓存** 在Java的持久化框架Hibernate中,缓存机制是提高应用程序性能的关键要素。缓存能够减少数据库的访问次数,提高数据读取速度,并且在一定程度上降低了系统的负载。本文将...

    47-二级缓存 Hibernate-Shiro-MyBatis

    在IT行业中,二级缓存是一种优化数据库访问性能的重要技术,特别是在使用ORM框架(如Hibernate)、权限管理框架(如Shiro)以及SQL映射框架(如MyBatis)时。二级缓存可以存储经常访问的数据,避免频繁地从数据库中...

    hibernate-core-5.0.11.Final.jar

    - 使用二级缓存提高性能,如EhCache集成。 - 合理设计实体关系,避免N+1查询问题。 - 使用批处理更新和插入,减少数据库交互次数。 通过以上分析,我们可以看出`hibernate-core-5.0.11.Final.jar`在ORM中的重要地位...

    hibernate-orm-master.zip

    Hibernate内置了两级缓存:一级缓存是Session级别的,每个Session都有自己的缓存,存储最近操作的对象;二级缓存可配置为进程级或集群级,用于存储经常访问的数据,提高性能。另外,Hibernate还支持第三方缓存系统如...

    Hibernate-二级缓存总结 开发技术 - Java.zip

    本篇主要关注的是Hibernate的二级缓存,这是一个提高应用性能的关键特性。 一级缓存是Hibernate内置的Session缓存,每个Session都有自己的缓存,用于存储实体对象,它可以避免频繁地与数据库进行交互,提高性能。...

    hibernate-release-5.0.7.Final的所有jar包

    同时,Hibernate还支持第二级缓存,可以提高数据读取速度。此外,其强大的查询语言HQL和Criteria API提供了灵活的数据检索方式。 总之,`hibernate-release-5.0.7.Final`版本的jar包集合是Java开发者进行ORM编程的...

    hibernate一级缓存和二级缓存的区别与联系

    总结来说,Hibernate 的一级缓存和二级缓存都是为了提高数据访问效率,但它们在范围和并发控制方面有所不同。一级缓存是事务级别的,保证了数据的强一致性,而二级缓存提供了更多的灵活性,可以跨事务共享,但需要...

    Hibernate一级缓存、二级缓存以及查询缓存实例

    本文将深入探讨Hibernate的一级缓存、二级缓存以及查询缓存,通过具体的实例来阐述它们的工作原理和使用方法。 首先,我们从一级缓存开始。一级缓存是Hibernate默认提供的缓存,它是每个Session级别的,也被称为...

    hibernate-release-5.2.10

    6. **缓存**:Hibernate内置了二级缓存机制,可以通过配置使用如Ehcache这样的缓存提供者,提高性能。 7. **关联映射**:包括一对一(@OneToOne)、一对多(@OneToMany)、多对一(@ManyToOne)、多对多(@...

    hibernate-release-4.1.4

    【标题】"hibernate-release-4.1.4" 是Hibernate...通过深入研究这个压缩包,开发者不仅可以了解Hibernate的基本用法,还能掌握更高级的功能,如事务管理、缓存策略、查询语言(HQL)等,从而提升开发效率和代码质量。

    hibernate一级和二级缓存配置与详解

    本篇将深入探讨Hibernate的一级缓存和二级缓存,以及查询缓存的配置和使用。 ### 一级缓存 一级缓存是Hibernate默认提供的缓存,它是Session级别的,每个Hibernate Session都有一个私有的、本地的一级缓存。当我们...

    hibernate-memcached包

    **hibernate-memcached包** 是一个专为Hibernate框架设计的扩展,目的是将流行的分布式内存缓存系统Memcached整合到Hibernate中,作为其二级缓存解决方案。在大型分布式应用中,缓存技术是提高性能的关键,特别是...

    springboot+jpa(hibernate配置redis为二级缓存) springboot2.1.4

    通常,一级缓存由Hibernate Session管理,而二级缓存则可以跨越多个Session进行共享。 在Spring Boot项目中配置Redis作为Hibernate的二级缓存,我们需要以下步骤: 1. **添加依赖**: 首先,在`pom.xml`文件中...

    hibernate-core 核心jar包

    9. **缓存机制**:Hibernate有两层缓存,第一层是Session级别的缓存,称为一级缓存;第二层是可选的,可以配置为使用第三方缓存服务,如Ehcache,称为二级缓存。缓存可以显著提升数据访问速度。 10. **事件和监听器...

    hibernate-release-4.3.10.Final.zip

    - **Session**:是操作数据库的入口,提供了一种基于对象的操作方式,支持CRUD操作,并具有事务管理和二级缓存功能。 4. **映射机制**: - **XML 映射文件**:如hibernate.hbm.xml,定义了Java类与数据库表之间的...

    项目中使用 hibernate-memcached 做二级缓存

    本文将详述如何在项目中使用Hibernate与Memcached结合实现二级缓存,并探讨Memcached的基本原理和使用方法。 首先,我们需要理解什么是Hibernate的二级缓存。在Hibernate框架中,一级缓存是每个Session级别的,它...

    hibernate4.0使用二级缓存jar包

    -- 查询的二级缓存配置 --&gt; &lt;property name="hibernate.cache.use_query_cache"&gt;true&lt;/property&gt; &lt;property name="cache.provider_class"&gt;org.hibernate.cache.EhCacheProvider&lt;/property&gt; 4.0配置如下: ...

    Hibernate二级缓存

    Hibernate二级缓存是一种提高应用程序性能的技术,它将数据存储在SessionFactory级别的缓存中,使得数据可以在不同的Session之间共享。这与一级缓存(Session级别)不同,一级缓存仅存在于单个Session生命周期内,当...

Global site tag (gtag.js) - Google Analytics