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

一级缓存

同一个session,session缓存

@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();
		
	}

二级缓存

跨session,sessionFactory缓存

@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();
	}

查询缓存

一级缓存跟二级缓存都只能缓存实体对象, 而查询缓存可以缓存基本属性, 同时查询缓存也可以缓存实体对象, 但是只能缓存其id

查询缓存的生命周期是: 一旦数据库表的数据发生修改, 则查询缓存则被清掉了
查询缓存的配置
1.配置ehcache.xml文件,将hibernate自带的文件复制到根目录下即可
一般不用修改。
2.配置`hibernate.cfg.xml文件

        <!-- 启用二级缓存 -->
        <property name="cache.use_second_level_cache">true</property>
        <!-- 配置使用的二级缓存的产品 -->
        <property name="hibernate.cache.region.factory_class">org.hibernate.cache.ehcache.EhCacheRegionFactory</property>
        <!-- 开启查询缓存缓存-->
        <property name="cache.use_query_cache">true</property>

3.导入ehcache-core-2.4.3.jar包
在hibernate目录lib\optional\ehcache
配置好之后的小实验

public void testQueryCache() {
		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();
	}
发布了47 篇原创文章 · 获赞 5 · 访问量 2050

猜你喜欢

转载自blog.csdn.net/OVO_LQ_Start/article/details/104109125