Hibernate提供了两种缓存:

  • 1.一级缓存:自带的不可卸载的,一级缓存的生命周期与Session一致,一级缓存成为Session级别的缓存
  • 2.二级缓存:默认没有开启,需要手动配置才可以使用,二级缓存可以在多个Session中共享数据,二级缓存成为SessionFactory级别的缓存

Sesison对象的缓存概述:  

  • 1.将对象存入到一级缓存中,session生命周期没有结束,那么对象在session中存放着
  • 2.内存中包含session的实例--->>>session的缓存(一些集合)--->>>集合包含的是缓存对象!

证明一级缓存的存在:

  在同一个Session中两次查询,查看执行了哪些SQL语句

    @Test
public void m01(){
Session session = HibernateUtils.openSession();
Transaction tr = session.beginTransaction(); User user1 = session.get(User.class, 1L);
System.out.println("-------------------------------");
User user2 = session.get(User.class, 1L); tr.commit();
session.close(); }

  控制台显示:

  只执行了一次查询语句,说明第一次查询之后 Hibernate将持久化对象存储在session中,再次执行就不用去数据库查询

Hibernate如何做到数据库与session进行同步更新操作

  使用get()查询到一个User对象,然后设置user的一个属性,commit。

  发现数据库中的该user属性也变化了(没有做update操作)

  快照机制

    @Test
public void m02(){
Session session = HibernateUtils.openSession();
Transaction tr = session.beginTransaction(); User user = session.get(User.class, 3L);
user.setAge(1); tr.commit();
session.close(); }

数据库变化:

===>>>

  证明了快照的存在

session的一些方法

  • session.clear();  --清空缓存
  • session.evict(obj);  --从缓存中清除指定对象
  • session.flush();  --刷出缓存(在不commit得情况下和数据库同步)

最新文章

  1. 7 COMPELLING REASONS YOU NEED TO START THE BUSINESS YOU’VE ALWAYS WANTED
  2. Ruby:字符串处理函数
  3. 在线程中调用SaveFileDialog
  4. Oracle10g RAC的简单操作
  5. WinForm 批量设置指定控件中的控件状态
  6. 01_JavaMail_05_创建邮件工具类MailUtils等方便发送邮件
  7. UVAlive7141 BombX 14年上海区域赛D题 线段树+离散化
  8. echarts实现上海地域PM值(map、timeline)
  9. Linux进程和线程的比較
  10. SpringMVC提交数据遭遇基础类型和日期类型报400错误解决方法
  11. ASP.NET遇到HTTP 错误 403.14 - Forbidden Web 服务器被配置为不列出此目录的内容
  12. Identity Server 4 预备知识 -- OAuth 2.0 简介
  13. java字符串对象存储机制
  14. Docker(二):Registry 镜像仓库
  15. 从 Firefox 35 版本开始,就无法兼容 PAC 式代理
  16. vcpkg-微软开发的VC++打包工具
  17. Linux下安装MySQL以及一些小坑
  18. MAC CURL : Error:35 SSL certificate problem: Couldn't understand the server certificate format
  19. 一个带bash,带glibc,中国时区,非root用户可运行crond命令的基于alpine镜像的Dockerfile
  20. 1025 PAT Ranking (25)(25 point(s))

热门文章

  1. css---5 only-child or nth-of-type
  2. Git中.gitignore忽略规则
  3. windows安装vscode,配置golang环境
  4. 《DSP using MATLAB》Problem 8.40
  5. vue表格之:summary-method="getSummaries"与show-summary(列求和)
  6. CSS清除默认边距
  7. JS规则 我与你同在(逻辑与操作符)数学中的“b大于a,b小于c”是“a<b<c”,那么在JavaScript中可以用&&表示
  8. Python全栈开发:configparser模块
  9. 区间dp——cf1025D二叉搜索树的中序遍历好题!
  10. Clion IDE的安装