hibernate教程--一级缓存详解
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教程--一级缓存详解相关推荐
- hibernate教程--二级缓存详解
Hibernate的二级缓存 一.缓存概述 缓存(Cache): 计算机领域非常通用的概念.它介于应用程序和永久性数据存储源(如硬盘上的文件或者数据库)之间,其作用是降低应用程序直接读写永久性数据存储 ...
- cpu二级缓存和一级缓存详解及区别(图解)
cpu二级缓存和一级缓存详解及区别(图解) 2012-09-02 12:27:55| 分类: 硬件技术 |字号 订阅 处理器缓存的传输速率确实很高,然而还不足以取代内存的地位,这主要是由于缓存只是内 ...
- hibernate教程--一级缓存
1.1Hibernate的一级缓存 1.1.1Hibernate的一级缓存: 什么是缓存: 缓存将数据库/硬盘上文件中数据,放入到缓存中(就是内存中一块空间).当再次使用的使用,可以直接从内存中获取. ...
- mybatis的一级缓存详解
文章目录 1.mybatis一级缓存是什么 2.代码示例 2.1.结果展示: 2.2.现象解析 3.有多个SqlSession或者分布式的环境下,数据库写操作会引起脏数据 3.1代码如下: 3.2结果 ...
- hibernate教程--检索方式详解(hql,sql,QBC)
1.1 Hibernate的检索方式 1.1.1 Hibernate的检索方式: 检索方式:查询的方式: 导航对象图检索方式: 根据已经加载的对象导航到其他对象 * Customer custome ...
- MyBatis 一级缓存二级缓存详解
相关内容: 架构师系列内容:架构师学习笔记(持续更新) MyBatis 缓存详解 cache 缓存 缓存是一般的ORM 框架都会提供的功能,目的就是提升查询的效率和减少数据库的压力.跟Hibernat ...
- Hibernate二级缓存详解(转)
Hibernate二级缓存详解(转) 本文转载 http://www.blogjava.net/supercrsky/articles/238580.html 与Session相对的是,Session ...
- h2 不能访问localhost_SpringBoot2.x系列教程44--H2数据库详解及搭建Web控制台
SpringBoot2.x系列教程44--H2数据库详解及搭建Web控制台 作者:一一哥 我在上一章节中讲解了Spring Boot中整合Mybatis,接下来我给大家介绍一款内存数据库--H2. H ...
- [Dreamweaver教程]Meta标签详解
[Dreamweaver教程]Meta标签详解 原作者:indian 出处:5D多媒体 发表时间:2004-12-8 关键词: 版权信息:传统媒体及商业网站禁止擅自转载:个人网站转载需经作者同意,并注 ...
最新文章
- kali系统破解WPA密码实战
- Techparty-广州Javascript技术专场(学习分享)
- Scikit-Learn 与 TensorFlow 机器学习实用指南学习笔记1 — 机器学习基础知识简介
- Repeater使用小结
- ssh(Spring+Spring mvc+hibernate)——DeptServiceImpl.java
- jquery学习之1.19-小练习3-输入用户名密码时焦点触发和失去焦点
- python加入小学课本_Python走进小学教材
- 【华为OD机试Python实现】HJ70 矩阵乘法计算量估算(中等)
- 互联网、大公司常用的英文缩写
- 一文带你认清云服务器和轻量应用服务器的区别
- 云时代编程语言Ballerina发布,TIOBE9月排行榜PHP排名在边缘飘摇(2019/09/16)
- Linux中的setenv与export
- vue 如何在 style 标签里使用变量(数据)
- 【esp32-s3】7.2 I2S——播放wav文件
- c语言编程曹冲称象,《曹冲称象》教学设计
- 电脑任务栏消失解决办法
- 水滴“逃离”流量焦虑
- mac下修改文件的md5值
- 虹科分享|太赫兹成像技术的分类与原理
- 【一笔画益智游戏教程攻略】总共有100关图文教程
热门文章
- IAR之函数和变量的绝对地址定位
- 海量数据处理 - 10亿个数中找出最大的10000个数(top K)
- 【web项目】—the type java.io.ObjectInputStream cannot be resolved. It is indirectly referenced from ....
- C++ Primer 5th笔记(chap 19 特殊工具与技术)运行时类型识別RTTI
- 区块链BaaS云服务(19)趣链Hyperchain
- C++ Primer 5th笔记(chap 13 拷贝控制)=default
- HTML5各种标签总结(HTML、head)
- 【django】如何搭建虚拟环境(解决mkvirtualenv:未找到命令)
- 2021-12-27
- 根据窗口名获取进程句柄和PID