当前位置:首页 > 开发 > 编程语言 > Hibernate > 正文

Hibernate 二级缓存举例(4.2 Final版)

发表于: 2013-04-28   作者:chinrui   来源:转载   浏览次数:
摘要: Hibernate 4.2里面的缓存 1、 hibernate 里面的缓存分成一级缓存与二级缓存与查询缓存 一级缓存:Session级别的缓存 二级缓存:SessionFactory级别的缓存 查询缓存 2、 一级缓存 @Test public void testCache() { Session s = sf.getCurrentSessi
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();
}

Hibernate 二级缓存举例(4.2 Final版)

  • 0

    开心

    开心

  • 0

    板砖

    板砖

  • 0

    感动

    感动

  • 0

    有用

    有用

  • 0

    疑问

    疑问

  • 0

    难过

    难过

  • 0

    无聊

    无聊

  • 0

    震惊

    震惊

编辑推荐
看下官网说明: 下载地址:http://nchc.dl.sourceforge.net/project/hibernate/hibernate3/3.5.0- Fi
Hibernate中的一级缓存是Session范围内的,而二级缓存是SessionFactory范围的, 需要使用第三方的实
Hibernate 缓存 缓存(Cache): 计算机领域非常通用的概念。它介于应用程序和永久性数据存储源(如硬盘
Hibernate缓存   缓存(Cache):计算机领域非常通用的概念。它介于应用程序和永久性数据存储源(如硬
Hibernate 缓存 缓存(Cache): 计算机领域很通用的概念。它介于应用程序和永久性数据存储源(如硬盘上
ExtJS官网 http://www.sencha.com/products/extjs/ 浏览器支持 Ext JS 4支持所有主流web浏览器,从In
Spring3.2 + Hibernate4.2 前三篇随笔中介绍了 用原生的JDBC访问数据库、一种高效的数据库连接池dru
《jBPM Designer 2.4.0.Final版发布》 作者:chszs,转载需注明。 作者博客主页:http://blog.csdn.
和《Hibernate 关系映射 收集、总结整理》 一样,本篇文章也是我很早之前收集、总结整理的,在此也
和《Hibernate 关系映射 收集、总结整理》 一样,本篇文章也是我很早之前收集、总结整理的,在此也
版权所有 IT知识库 CopyRight © 2009-2015 IT知识库 IT610.com , All Rights Reserved. 京ICP备09083238号