hibernate一级缓存

1.Hibernate一级缓存又称为“Session缓存”,“会话级缓存”。

2.通过Session从数据库查询实体时会把实体在内存中存储起来,下一次查询同一实体时不再从数据库获取,而是从内存中获取,这就是缓存

3.一级缓存的生命周期和Session相同,Session销毁,它也销毁。

4.一级缓存中的数据可适用范围在当前会话之内。

管理一级缓存的API

1.evict(),用于将某个对象从Session的一级缓存中清除。

2.clear(),用于将一级缓存中的所有对象全部清除。

Qurey.list()和Qurey.iterate()

1.Qurey.list()查询数据,不会从一级缓存中查找,直接向数据库发送sql语句,将查询返回的对象保留在缓存中。

2.Qurey.iterate()不从一级缓存中找,直接向数据库发送sql,查询id,当需要使用对象其他属性的时候,先在缓存中根据id查找对象,如果没有则向数据库发送sql查询,因此单独用该方法查询会产生N+1问题(即向数据库发送N+1条语句查询N个对象的信息)

3.如果存在这种需求:在两个不同的session都需要对相同的对象进行访问,通过Qurey.list()需要发送两条sql语句甚至更多,为了避免可以设置二级缓存,在第一个session中Query.list(),在第二个session中直接通过Qurey.iterate()迭代从二级缓存中获取

hibernate二级缓存(SessionFactory缓存)

1.添加在hibernate.cfg.xml里面的配置

        <!-- 开启二级缓存 --><property name="hibernate.cache.use_second_level_cache">true</property><!-- 二级缓存的提供类 在hibernate4.0版本以后我们都是配置这个属性来指定二级缓存的提供类--><property name="hibernate.cache.region.factory_class">org.hibernate.cache.ehcache.EhCacheRegionFactory</property><!-- 二级缓存配置文件的位置 --><property name="hibernate.cache.provider_configuration_file_resource_path">ehcache.xml</property>

2.配置ehcache.xml具体见http://www.cnblogs.com/kundeg/p/7172428.html

3.通过注释配置entity,在类前加上@Cache(usage=CacheConcurrencyStrategy.READ_ONLY)

CacheConcurrencyStrategy属性值常见的有READ_ONLY(对该entity对应的表数据只读取然后缓存)和READ-WIRTE(对表数据可以读取也可以更新)

4,一定要注意:hibernate二级缓存的必须是整个对象,如果查询的只是对象某些属性,那么该对象不会被缓存

查询缓存(SessionFactory级缓存)

1.在上述二级缓存的基础上继续配置

2.在hibernate.cfg.xml中添加配置

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

2.在entity注释上添加@Cacheable

3.在hql语句后要调用setCacheable(true)方法

4.只有当 HQL 查询语句完全相同时,连参数设置都要相同,此时查询缓存才有效

hibernate的三种状态(transient(瞬时状态),persistent(持久化状态)以及detached(离线状态))

详情见http://www.cnblogs.com/xiaoluo501395377/p/3380270.html

转载于:https://www.cnblogs.com/kundeg/p/7173521.html

hibernate缓存机制相关推荐

  1. hibernate缓存机制与N+1问题

    在项目中遇到的趣事 本文基于hibernate缓存机制与N+1问题展开思考, 先介绍何为N+1问题 再hibernate中用list()获得对象: 1 /** 2 * 此时会发出一条sql,将30个学 ...

  2. Hibernate 缓存机制

    转载:http://www.cnblogs.com/wean/archive/2012/05/16/2502724.html 一.why(为什么要用Hibernate缓存?) Hibernate是一个 ...

  3. hibernate缓存机制详细介绍

    hibernate的缓存机制,包括一级缓存(session级别).二级缓存(sessionFactory级别). 一:hibernate的 N+1问题 list()获得对象: 如果通过list()方法 ...

  4. (11) Hibernate 缓存机制

    一.why(为什么要用Hibernate缓存?) Hibernate是一个持久层框架,经常访问物理数据库. 为了降低应用程序对物理数据源访问的频次,从而提高应用程序的运行性能. 缓存内的数据是对物理数 ...

  5. Hibernate学习——(十二)Hibernate缓存机制(一级、二级、查询)

    一.why(为什么要用Hibernate缓存?) Hibernate是一个持久层框架,经常访问物理数据库. 为了降低应用程序对物理数据源访问的频次,从而提高应用程序的运行性能. 缓存内的数据是对物理数 ...

  6. mysql缓存hibernate_关于Hibernate缓存机制

    缓存是介于应用程序和物理数据源之间,其作用是为了降低应用程序对物理数据源访问的频次,从而提高了应用的运行性能.缓存内的数 缓存是介于应用程序和物理数据源之间,其作用是为了降低应用程序对物理数据源访问的 ...

  7. Hibernate 缓存机制续 - 查询缓存

    对于一个应用来说,最多的操作是查询,而并非是写入和更改,如果能将查询缓存起来,那么能够有效提升效率. Hibernate的查询缓存是基于二级缓存的,所以,如果想使用查询缓存,必须先开启二级缓存. 1. ...

  8. hibernate mysql缓存机制_Hibernate的缓存机制

    面试常问到的问题: 首先说下hibernate缓存的作用(即为什么要用缓存机制),然后再具体说说Hibernate中缓存分类情况,最后可以举例: Hibernate缓存的作用: Hibernate是一 ...

  9. Hibernate中的三种数据持久状态和缓存机制

    Java三大框架之--Hibernate中的三种数据持久状态和缓存机制 Hibernate中的三种状态   瞬时状态:刚创建的对象还没有被Session持久化.缓存中不存在这个对象的数据并且数据库中没 ...

最新文章

  1. java 操作uart串口_【tty】应用程序调用write写串口调用流程
  2. 微软将中止支持 .NET Core 2.2,建议开发者升级至 .NET Core 3.1
  3. 某单位会java_Java核心API -- 4(日期类)
  4. centos5.8安装mysql5.3_CentOS 5.8 64位 源码安装mysql5.5.28
  5. python安装rarfile模块_python windows下安装pip及rarfile
  6. Windows下Goland的环境搭建
  7. 空心心形图案的c语言程序,C语言写的各种心形图案_6583
  8. 集成电路可测性设计(DFT,Design For Testability)
  9. 苞米豆MyBatis-plus代码生成器
  10. windows server 2012 r2 搭建V...P...N...
  11. 伸展树 自底向上 自顶向下
  12. unicode编码转gb2312编码并显示中文(cjava)
  13. HRBUST1151-魔女
  14. 施主,贫僧乃东土大唐而来,恳请在此借宿一晚……...
  15. Java学习之路-----Java基础简介,基础语法,Java标识符,修饰符,关键字与注释
  16. 三天时间, 无线破解从入门到放弃
  17. ThumbnailUtils.createVideoThumbnail 获取到的帧不是视频第一个关键帧
  18. python气泡图画_Python使用Plotly绘图工具,绘制气泡图
  19. 高德地图进行省市下钻(vue)
  20. 重装系统计算机无法启动,重装系统时重启电脑总是显示windows无法启动,原因可能是最近更改了硬件或软件...

热门文章

  1. Java GUI编程:swing实现上传tiff文件至hdfs功能
  2. kafka后台启动命令
  3. kibana操作elasticsearch:创建映射字段
  4. Java虚拟机(JVM)的内存划分
  5. 多个vue项目合并成一个_集美们,快看如何一步将多个PDF合并成一个PDF
  6. SVM支持向量机【直观理解】
  7. 信息论2——单维连续信源
  8. android 拦截点击事件,Android事件拦截机制
  9. android处理服务器的集合,android集合SSH搭建服务器客户端请求
  10. vs2010下使用dmp文件和pdb文件调试时dump、exe和pdb三个文件要保持版本一致的原因