2016-03-14 21:36 421人阅读 评论(0) 收藏 举报
 分类:
web开发(19) 

版权声明:本文为博主原创文章,未经博主允许不得转载。

今天面试碰到答不上来。。马上回家查了下,现在写下对hibernate缓存的理解以加深印象。

1、一级缓存

可以简单的理解为session缓存,即同一个session中使用get、load、迭代,会优先重缓存中取,如果没有则查询数据库并存入缓存,session关闭后缓存清空

2、二级缓存

可以直接理解为升级版,即sessionFactory 缓存,即只要使用的session是同一个sessionFactory创建的则可共用缓存,并且修改、删除、添加、会更新缓存。

3、查询缓存

也就是三级缓存(说三级缓存的很坑),我的理解就是query缓存,使用query.setCacheable(true) 即可开启查询缓存,查询缓存只缓存普通属性结果集,不缓存整个实体类结果集,以及实体类ID结果集,查询缓存是针对普通属性结果集的缓存对实体对象的结果集只缓存id,查询缓存在查询实体类时会首先到查询缓存中查询ID然后根据ID到一级或者二级缓存中查询实体类,没有则从数据库取,查询普通属性时也是优先从缓存中取。

关闭二级缓存,开启查询缓存,调用query.list()会发出N条语句,因为查询缓存是根据ID到二级缓存中找的,没有则查找数据库,二级缓存和查询缓存同时开启则查询同样SQL语句时不会发出数据库请求,而是直接从缓存中取。

备注:

查询缓存只会query.list()起作用.

session.find方法永远是从数据库中获取数据

缓存通过map 使用ID作为KEY来缓存对象、一级和二级缓存只缓存对象

 
1

最新文章

  1. 在离线环境中使用.NET Core
  2. 在 windows 环境下安装 redislive
  3. BIEE 仪表盘的创建
  4. ORACLE RAC集群的体系结构
  5. Android中xml设置Animation动画效果详解
  6. ubuntu16.04 编译安装mysql5.7.x,以及配置使用
  7. Android Audio 分析
  8. bzoj3721
  9. jquery实现全选、全不选、反选、获取选中的所有值总结
  10. React-native初体验(安卓篇)
  11. GCD(欧拉函数)
  12. 【ORM框架】Spring Data JPA(一)-- 入门
  13. Highcharts入坑记
  14. 颠覆区块链的钱包——AngelToken钱包
  15. Demystify Git
  16. python websocket 客户端连接
  17. MySQL(3)---MySQL优化
  18. EBS开发附件上传和下载功能(转)
  19. Mathtype使用技巧
  20. 20145312《网络对抗》 逆向及Bof基础实践

热门文章

  1. MongoDB查询指定字段(field)返回指定字段的方法
  2. iOS __weak学习碰到的疑问
  3. Spark核心概念理解
  4. mybatis 一二事(2) - 动态代理
  5. [na][QoS]cisco3560限速配置案例-收集于网工泡泡
  6. angular学习笔记(五)-阶乘计算实例(1)
  7. php phpmail发送邮件的效果
  8. 解决linux分区提示doesn't contain a valid partition table
  9. python操作excel之 模块 xlrd
  10. [转]SQL Server 2012 的 T-SQL 新功能 – 新的数据分析函数(LEAD、LAG)