Hibernate学习笔记(六)——缓存

一、Hibernate缓存

1、什么是缓存?

Hibernate中用到了缓存的概念,那么什么是缓存呢?这里介绍的缓存并不是指计算机的内存或者CPU的一二级缓存,这里的缓存是指为了降低程序对物理数据源访问的频次,从而提高程序运行性能的一种策略。

2、为什么要使用缓存?

为什么Hibernate要使用缓存呢?可以从三点进行分析:(1)Hibernate是一个ORM框架,ORM框架访问数据库的效率直接影响应用程序的运行速度,提升和优化ORM框架的执行效率至关重要;(2)Hibernate的缓存是提升和优化Hibernate执行效率的重要手段,所以学会Hibernate缓存的使用和配置是优化的关键;(3)评判一个ORM框架是否优秀,访问数据库的频次就一个重要的标准

3、缓存使如何工作的?

Hibernate缓存就是将数据库中的数据存储在内存中,缓存的一般工作原理可以通过下图来进行分析(图片摘自慕课网)。

应用程序要查询某一条数据时首先会去缓存中查找,如果在缓存中找到相应的数据,则为缓存命中,将命中的数据直接从缓存中取出返回给应用程序,如果未命中则去数据库查询相应的数据,将数据库中的数据返回给应用程序,同时也会在缓存中保存数据以备下次查询。
在Hibernate中用到了两种缓存,分别是一级缓存和二级缓存,下面将分别介绍这两种缓存的基本内容,本次介绍的案例涉及到一张员工表employee,表中有两个字段empid和empname,我们预先在表中保存两条数据。

二、一级缓存

首先我们来看下面这个例子。
	@Test
	public void testCache() {
		Session session = getSession();
		Employee emp = session.get(Employee.class, 1);
		System.out.println(emp.getEmpname());
		
		emp = session.get(Employee.class, 1);
		System.out.println(emp.getEmpname());
	}
我们使用JUnit来进行测试,其中getSession()方法是一个获取Session对象的工具方法,在这个例子中我们首先获取Session,然后查询empid为1的对象,接着再做一次查询,仍然查询empid为1的对象,我们运行测试方法,查看控制台的输出。
Hibernate: select employee0_.empid as empid1_0_0_, employee0_.empname as empname2_0_0_ from employee employee0_ where employee0_.empid=?
张三
张三
可以看到控制台只打印了一次查询的SQL,这说明用Session第一次查询到empid为1的对象之后这个对象被缓存起来了,第二次查询的时候直接从缓存中获取相应的对象,而不是再查一次数据库。这个例子表明Hibernate的缓存是与Session有关的。
我们修改上面的例子再来看一下。
	@Test
	public void testCache() {
		Session session = getSession();
		Employee emp = session.get(Employee.class, 1);
		System.out.println(emp.g
  • 4
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值