说说自己对hibernate一级、二级、查询、缓存的理解。
2024-08-26 12:04:37
分类:
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
- 踩
最新文章
- 在离线环境中使用.NET Core
- 在 windows 环境下安装 redislive
- BIEE 仪表盘的创建
- ORACLE RAC集群的体系结构
- Android中xml设置Animation动画效果详解
- ubuntu16.04 编译安装mysql5.7.x,以及配置使用
- Android Audio 分析
- bzoj3721
- jquery实现全选、全不选、反选、获取选中的所有值总结
- React-native初体验(安卓篇)
- GCD(欧拉函数)
- 【ORM框架】Spring Data JPA(一)-- 入门
- Highcharts入坑记
- 颠覆区块链的钱包——AngelToken钱包
- Demystify Git
- python websocket 客户端连接
- MySQL(3)---MySQL优化
- EBS开发附件上传和下载功能(转)
- Mathtype使用技巧
- 20145312《网络对抗》 逆向及Bof基础实践
热门文章
- MongoDB查询指定字段(field)返回指定字段的方法
- iOS __weak学习碰到的疑问
- Spark核心概念理解
- mybatis 一二事(2) - 动态代理
- [na][QoS]cisco3560限速配置案例-收集于网工泡泡
- angular学习笔记(五)-阶乘计算实例(1)
- php phpmail发送邮件的效果
- 解决linux分区提示doesn't contain a valid partition table
- python操作excel之 模块 xlrd
- [转]SQL Server 2012 的 T-SQL 新功能 – 新的数据分析函数(LEAD、LAG)