标签:
缓存,什么是缓存
缓存是指在内存中开辟一块空间,将硬盘中的数据存储在内存。实现访问速度的提高。提升效率
hibernate中的缓存大体分为三种
一级缓存可称为session级缓存,一级缓存是运用在同一session中的
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();
上述代码只访问数据库一次
Category c2 = (Category)session.load(Category.class, 1);
查询session缓存中是否有该元素
如果执行下述代码,则会访问两次数据库
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();
一级缓存只是作用于同一session中,带来了很多局限性。例如在多线程中,一个线程创建一个session,多个线程访问同一元素,则会访问多次数据库。这样效率会大大降低,解决的方案是建立一个“大”的session缓存。这时候就要引进了二级缓存。
二级缓存是sessionfactory级别的缓存
理解二级缓存需要理解缓存提供商
上述为 cache providers,下面配置cache providers
打开hibernate.cfg.xml 添加
<property name="cache.use_second_level_cache">true</property>
<property name="cache.provider_class">org.hibernate.cache.EhCacheProvider</property>
实体类中
需要注意的,要加入ehcache的jar包
然后就配置完session factory级别的缓存了。不同session执行同一语句访问一次数据库
Actions that add an item to internal cache of the Session
save()
update()
saveOrUpdate()
load()
get()
list()
iterate()
scroll()
如果需要query使用二级缓存,需要打开查询缓存
查询缓存的意思是使用query时,必须查询的语句相同。才可使用二级缓存
Set the hibernate.cache.use_query_cache property to true
.
下面例子
session缓存总结:缓存很少用,尤其是二级缓存,有点扯淡。也就面试时用的多。
二级缓存适用于:
ok了
标签:
原文地址:http://www.cnblogs.com/ouzilin/p/4977167.html