Hibernate学习之---二级缓存和查询缓存

来源:互联网 发布:librosa有c语言版本吗 编辑:程序博客网 时间:2024/05/18 03:52

Hibernate包括两个级别的缓存:

  • 默认总是启用的Session级别的一级缓存。
  • 可选的SessionFactory级别的二级缓存。

一旦在应用中开启了二级缓存,当Session需要抓取数据时,Session将会先查找一级缓存,再查找二级缓存,只有当一级缓存和二级缓存中都没有需要抓取的数据时,才会在查找底层数据库。

1.开启二级缓存

    hibernate.cfg.xml    <property name="hibernate.cache.use_second_level_cache">true<property/>

一旦开启了二级缓存,并且设置了对某个持久化实体类启动缓存,SessionFacory就会缓存应用访问过的该实体类的每个对象,除非缓存的数据超出缓存空间。

在hibernate.cfg.xml文件中设置开启缓存之后,还需要设置使用哪种二级缓存实现类。

    <property name="hibernate.cache.region.factory_class">org.hibernate.cache.ehcache.EhCacheRegionFactory</property>

EhCacheRegionFactory就是Hibernate常用的缓存实现类。

Hibernate二级缓存的用法:

  • 在hibernate.cfg.xml文件中开启二级缓存。需要做两件事情:1.设置启用二级缓存;2.设置二级缓存的实现类。
  • 复制二级缓存的JAR包。
  • 将缓存实现所需的配置文件添加到系统的类加载路径中。
  • 设置对哪些实体类、实体的哪些集合属性启用二级缓存,方式为:

    • 修改要使用缓存的持久化类文件,使用Hibernate提供的@Cache注解修饰该持久化类,或使用该注解修饰集合属性。
    • 在hibernate.cfg.xml文件中使用<class-cache.../><collection-cache.../>元素对指定的持久化类、集合属性启用二级缓存。

2.管理缓存和统计缓存

Session级别的一级缓存是局部缓存,它只对当前Session有效;SessionFactory级别的二级缓存是全局缓存,它对所有的Session都有效。
在某些特殊情况下,可以调用Session的evict(Object object)方法,将该方法或集合从一级缓存中剔除。
为了判断某个对象是否处于Session缓存中,可以借助于Session提供的contains(Object object)方法,该方法返回一个boolean值。
Session的clear()方法把所有对象彻底清除。
SessionFactory提供了一个getCache()方法,该方法的返回值是Cache对象,通过该对象即可操作二级缓存中的实体、集合等。

3.使用查询缓存

一级、二级缓存都是对整个实体进行缓存,它不会缓存普通属性,如果想对普通属性进行缓存,则可以考虑使用查询缓存。
对于查询缓存,它缓存的key就是查询所用的HQL或SQL语句。需要指出的是,查询缓存不仅要求所使用的HQL语句、SQL语句相同,甚至要求所传入的参数也相同,Hibernate才能直接从查询缓存中取得数据。
查询缓存默认也是关闭的,为了开启查询缓存,必须在hibernate.cfg.xml文件中增加:

<property name="hibernate.cache.use_query_cache">true</property>

除此之外,还必须调用Query对象的setCacheable(true)才会对查询结果进行缓存。

阅读全文
0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 初一数学太差怎么办 三年级孩子数学差怎么办 三年级孩子数学很差怎么办 初中学习不好高中怎么办 四年级孩子数学不好怎么办 孩子学习不开窍怎么办 孩子学习太笨怎么办 老师是个小人怎么办 孩子写字太差怎么办 孩子写字下手重怎么办 孩子一年级数学不好怎么办 孩子数学理解能力差怎么办 智商情商都低怎么办 一年级孩子数学很差怎么办 一年级孩子数学差怎么办 一年级数学学不好怎么办 孩子成绩差该怎么办 小学生数学太差怎么办 小学数学基础差怎么办 孩子一年级学习不好怎么办 快两岁的宝宝老尿裤怎么办 戒母乳宝宝哭闹怎么办 三周岁不肯说话怎么办 两岁宝宝打人怎么办 刚开始跳绳腿疼怎么办 两周岁宝宝拉肚子怎么办 宝宝睡觉认人怎么办 宝宝脸不光滑怎么办 两周岁宝宝打人怎么办 分手后想念前任怎么办 孩子不学习该怎么办 小孩吃了牙膏怎么办 小孩子吃了牙膏怎么办 一岁宝宝龋齿怎么办 宝宝吃牙膏了怎么办 刷牙吞了牙膏怎么办 宝宝刷牙吞牙膏怎么办 宝宝语言发育迟缓怎么办 两岁宝宝叛逆怎么办 宝宝不愿意学说话怎么办 一岁多宝宝嘴臭怎么办