hibernate二级缓存

来源:互联网 发布:08cms家装系统 编辑:程序博客网 时间:2024/05/16 13:29

hibernate包括两个级别的缓存:
默认总是开启的Session级别的一级缓存
可选的SessionFactory级别的二级缓存

其中Session级别的一级缓存不需要开发者关心,默认总是有效地,当应用保存持久化实体、修改持久化实体时,
Session并不会立即把这种改变flush到数据库,而是缓存到当前Session的一级缓存中,
除非程序显示调用Session的flush()方法,或程序关闭Session时才会把这些改变一次性的flush到底层数据库,
通过这种缓存,可以减少与数据库的交互,从而提高数据库的访问性能。

SessionFactory级别的二级缓存时全局的,应用的所有Session都共享这个二级缓存,不过SessionFactory级别的缓存默认是关闭的,
必须由程序显示的开启。一旦在应用中开启了二级缓存,当Session需要抓取数据时,Session将会优先从二级缓存中抓取

在适当的时候,合理的设置Hibernate的二级缓存也可以很好的提高应用的数据库访问性能

为了开启Hibernate的二级缓存,需要在hibernate.cfg.xml文件中设置如下属性:
<!--开启二级缓存-->
<property name="hibernate.cache.use_second_level_cache">true</property>
在实际应用中一般不需要开发者自己实现缓存,直接使用第三方提供的开源框架实现即可。因此在hibernate.cfg.xml中设置开启缓存之后,还需要
设置使用哪一种二级缓存实现类。例如如下代码片段:
<!--设置二级缓存的实现类-->
<property  name="hibernate.cache.provider_class">org.hibernate.cache.EhCacheProvider</property>

Hibernate二级缓存的用法:
(1)在hibernate.cfg.xml文件中开启二级缓存。需要做两件事:
a.设置启用二级缓存b.设置二级缓存的实现类
(2)复制二级缓存的jar包。将Hibernate项目路径下的lib\optional\下的对应缓存的jar包复制到应用的类加载路径中。
(3)将缓存实现所需要的配置文件添加到系统的类加载路径中
(4)设置对哪些实体类、实体的哪些集合属性启用二级缓存。这一步有两种方式:
a.修改要使用缓存的实体的映射文件。在持久化映射文件的<class.../>、或<set.../>、<list.../>等集合元素内使用<cache.../>元素指定缓存策略。
b.在hibernate.cfg.xml文件中使用<class-cache.../>或<collection-cache.../>元素对指定持久化类、集合属性启用二级缓存