1.1 Hibernate的一级缓存

1.1.1 Hibernate的一级缓存:

什么是缓存:

缓存将数据库/硬盘上文件中数据,放入到缓存中(就是内存中一块空间).当再次使用的使用,可以直接从内存中获取.

缓存的好处:

* 提升程序运行的效率.缓存技术是Hibernate的一个优化的手段.

Hibernate分成两个基本的缓存:

* 一级缓存:Session级别的缓存.一级缓存与session的生命周期一致.自带的.不可卸载.

* 二级缓存:SessionFactory级别的缓存.不是自带的.

在 Session 接口的实现中包含一系列的 Java 集合, 这些 Java 集合构成了 Session 缓存. 只要 Session 实例没有结束生命周期, 存放在它缓存中的对象也不会结束生命周期.

1.1.2 证明Hibernate的一级缓存的存在:

@Test// 证明一级缓存的存在public void demo3(){// 1.创建SessionSession session = HibernateUtils.openSession();// 2.开启事务Transaction tx = session.beginTransaction();// save方法可以向一级缓存中存放数据的./*Book book = new Book();book.setName("JQuery开发");book.setAuthor("张XX");book.setPrice(45d);Integer id = (Integer) session.save(book);Book book2 = (Book) session.get(Book.class, id);System.out.println(book2);*/// 分别用get执行两次查询.Book book1 = (Book) session.get(Book.class, 1);// 马上发生SQL去查询System.out.println(book1);Book book2 = (Book) session.get(Book.class, 1);// 不发生SQL,因为使用一级缓存的数据System.out.println(book2);// 3.提交事务tx.commit();// 4.关闭资源session.close();}

1.1.3 深入理解一级缓存中快照区:

@Test// 深入理解一级缓存结构:快照区:public void demo4(){// 1.创建SessionSession session = HibernateUtils.openSession();// 2.开启事务Transaction tx = session.beginTransaction();// 获得一个持久态的对象.Book book = (Book) session.get(Book.class, 1);book.setName("Spring3开发");// 3.提交事务tx.commit();// 4.关闭资源session.close();}

结论:向一级缓存存入数据的时候,放入一级缓存区和一级缓存快照区,当更新了一级缓存的数据的时候,事务一旦提交,比对一级缓存和快照区,如果数据一致,不更新,如果数据不一致,自动更新数据库.

1.1.4 Hibernate管理一级缓存:

一级缓存是与session的生命周期相关的.session生命周期结束,一级缓存销毁了.

* clear()/evict()/flush()/refresh()管理一级缓存.

* clear():清空一级缓存中所有的对象.

* evict(Object obj):清空一级缓存中某个对象.

* flush():刷出缓存.

* refresh(Object obj):将快照区的数据重新覆盖了一级缓存的数据.

1.1.5 Hibernate一级缓存的刷出时机

FlushMode:

* 常量:

* ALWAYS:每次查询的时候都会刷出.手动调用flush.事务提交的时候.

* AUTO:默认值.有些查询会刷出.手动调用flush.事务提交的时候.

* COMMIT:在事务提交的时候,手动调用flush的时候.

* MANUAL:只有在手动调用flush才会刷出.

严格程度:MANUAL > COMMIT > AUTO > ALWAYS

1.2 操作持久化对象的方法:

save():

保存一条记录:将瞬时态对象转成持久态对象.

update()

更新一条记录:将脱管态对象转成持久态对象.

在<class>标签上设置select-before-update="true"在更新之前先去查询

saveOrUpdate():

根据对象状态的不同执行不同的save获得update方法.

* 如果对象是一个瞬时态对象:执行save操作.

* 如果对象是一个脱管态对象:执行update操作.

* 设置id不存在,就会报错,可以在<id>上设置一个unsaved-value=”-1”,执行保存的操作.

delete():

将持久态对象转成瞬时态.

get()/load():

获得一个持久态对象.

hibernate教程--一级缓存详解相关推荐

  1. hibernate教程--二级缓存详解

    Hibernate的二级缓存 一.缓存概述 缓存(Cache): 计算机领域非常通用的概念.它介于应用程序和永久性数据存储源(如硬盘上的文件或者数据库)之间,其作用是降低应用程序直接读写永久性数据存储 ...

  2. cpu二级缓存和一级缓存详解及区别(图解)

    cpu二级缓存和一级缓存详解及区别(图解) 2012-09-02 12:27:55|  分类: 硬件技术 |字号 订阅 处理器缓存的传输速率确实很高,然而还不足以取代内存的地位,这主要是由于缓存只是内 ...

  3. hibernate教程--一级缓存

    1.1Hibernate的一级缓存 1.1.1Hibernate的一级缓存: 什么是缓存: 缓存将数据库/硬盘上文件中数据,放入到缓存中(就是内存中一块空间).当再次使用的使用,可以直接从内存中获取. ...

  4. mybatis的一级缓存详解

    文章目录 1.mybatis一级缓存是什么 2.代码示例 2.1.结果展示: 2.2.现象解析 3.有多个SqlSession或者分布式的环境下,数据库写操作会引起脏数据 3.1代码如下: 3.2结果 ...

  5. hibernate教程--检索方式详解(hql,sql,QBC)

    1.1 Hibernate的检索方式 1.1.1 Hibernate的检索方式: 检索方式:查询的方式: 导航对象图检索方式:  根据已经加载的对象导航到其他对象 * Customer custome ...

  6. MyBatis 一级缓存二级缓存详解

    相关内容: 架构师系列内容:架构师学习笔记(持续更新) MyBatis 缓存详解 cache 缓存 缓存是一般的ORM 框架都会提供的功能,目的就是提升查询的效率和减少数据库的压力.跟Hibernat ...

  7. Hibernate二级缓存详解(转)

    Hibernate二级缓存详解(转) 本文转载 http://www.blogjava.net/supercrsky/articles/238580.html 与Session相对的是,Session ...

  8. h2 不能访问localhost_SpringBoot2.x系列教程44--H2数据库详解及搭建Web控制台

    SpringBoot2.x系列教程44--H2数据库详解及搭建Web控制台 作者:一一哥 我在上一章节中讲解了Spring Boot中整合Mybatis,接下来我给大家介绍一款内存数据库--H2. H ...

  9. [Dreamweaver教程]Meta标签详解

    [Dreamweaver教程]Meta标签详解 原作者:indian 出处:5D多媒体 发表时间:2004-12-8 关键词: 版权信息:传统媒体及商业网站禁止擅自转载:个人网站转载需经作者同意,并注 ...

最新文章

  1. kali系统破解WPA密码实战
  2. Techparty-广州Javascript技术专场(学习分享)
  3. Scikit-Learn 与 TensorFlow 机器学习实用指南学习笔记1 — 机器学习基础知识简介
  4. Repeater使用小结
  5. ssh(Spring+Spring mvc+hibernate)——DeptServiceImpl.java
  6. jquery学习之1.19-小练习3-输入用户名密码时焦点触发和失去焦点
  7. python加入小学课本_Python走进小学教材
  8. 【华为OD机试Python实现】HJ70 矩阵乘法计算量估算(中等)
  9. 互联网、大公司常用的英文缩写
  10. 一文带你认清云服务器和轻量应用服务器的区别
  11. 云时代编程语言Ballerina发布,TIOBE9月排行榜PHP排名在边缘飘摇(2019/09/16)
  12. Linux中的setenv与export
  13. vue 如何在 style 标签里使用变量(数据)
  14. 【esp32-s3】7.2 I2S——播放wav文件
  15. c语言编程曹冲称象,《曹冲称象》教学设计
  16. 电脑任务栏消失解决办法
  17. 水滴“逃离”流量焦虑
  18. mac下修改文件的md5值
  19. 虹科分享|太赫兹成像技术的分类与原理
  20. 【一笔画益智游戏教程攻略】总共有100关图文教程

热门文章

  1. IAR之函数和变量的绝对地址定位
  2. 海量数据处理 - 10亿个数中找出最大的10000个数(top K)
  3. 【web项目】—the type java.io.ObjectInputStream cannot be resolved. It is indirectly referenced from ....
  4. C++ Primer 5th笔记(chap 19 特殊工具与技术)运行时类型识別RTTI
  5. 区块链BaaS云服务(19)趣链Hyperchain
  6. C++ Primer 5th笔记(chap 13 拷贝控制)=default
  7. HTML5各种标签总结(HTML、head)
  8. 【django】如何搭建虚拟环境(解决mkvirtualenv:未找到命令)
  9. 2021-12-27
  10. 根据窗口名获取进程句柄和PID