Hibernate(六)缓存

什么是Hibernate的缓存:
与计算机的内存cpu的一二级缓存无关。
Hibernate缓存是用来降低应用程序对物理数据源访问的频次,从而提高应用程序的运行性能的一种策略。

为什么使用缓存:
ORM框架访问数据库的效率直接影响应用程序的运行速度
Hibernate的缓存是提升和优化Hibernate执行效率的重要手段

Hibernate缓存的工作原理:
缓存是对数据源的复制,下一次再访问时直接从缓存中获取,Hibernate缓存存储在应用程序的内存中,从而提高效率


一、一级缓存

称Session缓存,会话级缓存。
一级缓存的生命周期和Session相同,Session销毁,它也销毁,可适用范围在当前会话内。
一级缓存是强制使用的无法取消的。
Session session = HibernateUtil.getSession();
Transaction transaction = session.beginTransaction();
Students s = (Students) session.get(Students.class, 2);
System.out.println(s.getSname());
s = (Students) session.get(Students.class, 2);
System.out.println(s.getSname());
transaction.commit();
session.close();

可以看到,虽然调用了两次get方法,缺只执行了一次select语句,第二次默认去缓存中查找的,注意是在同一个session中


一级缓存常用的API
①evict():用于对某个对象从session的一级缓存中清除
②clear():将一级缓存中所有对象全部清除
③flush():刷新一级缓存区的内容,使之与数据库数据保持同步。
注意:
常用的Query方法中,query.list()是不使用一级缓存的,每次都是重新查询数据库的。

二、二级缓存
又称为SessionFactory缓存,在每个session中共用的缓存。
使用二级缓存的场景:
①很少被修改的数据
②不重要的数据,偶尔并发
③不会被并发访问的数据
④参考数据

二级缓存不是强制使用的,使用之前需要配置相应的内容:
①添加二级缓存相应的jar包
②hibernate.cfg.xml中添加Provider类描述
<property name="cache.provider_class">net.sf.ehcache.hibernate.EhcacheProvider</property>
③添加二级缓存属性配置文件ehcache.xml
④在需要被缓存的表的映射文件中添加<cache/>标签

猜你喜欢

转载自sunyuqian.iteye.com/blog/2256823