1.1Hibernate的一级缓存
1.1.1Hibernate的一级缓存:
什么是缓存:
缓存将数据库/硬盘上文件中数据,放入到缓存中(就是内存中一块空间).当再次使用的使用,可以直接从内存中获取.
缓存的好处:
* 提升程序运行的效率.缓存技术是Hibernate的一个优化的手段.
Hibernate分成两个基本的缓存:
* 一级缓存:Session级别的缓存.一级缓存与session的生命周期一致.自带的.不可卸载.
* 二级缓存:SessionFactory级别的缓存.不是自带的.
在 Session 接口的实现中包含一系列的 Java 集合, 这些 Java 集合构成了 Session 缓存. 只要 Session 实例没有结束生命周期, 存放在它缓存中的对象也不会结束生命周期.
1.1.2证明Hibernate的一级缓存的存在:
@Test
// 证明一级缓存的存在
public void demo3(){
// 1.创建Session
Session 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.创建Session
Session 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.4Hibernate管理一级缓存:
一级缓存是与session的生命周期相关的.session生命周期结束,一级缓存销毁了.
* clear()/evict()/flush()/refresh()管理一级缓存.
* clear():清空一级缓存中所有的对象.
* evict(Object obj):清空一级缓存中某个对象.
* flush():刷出缓存.
* refresh(Object obj):将快照区的数据重新覆盖了一级缓存的数据.
1.1.5Hibernate一级缓存的刷出时机
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中使用了一级缓存和二级缓存的机制来提高程序的性能. 一 为什么要使用缓存? 缓存是一块存储区域,可能是一块内存,也可能是一块硬盘.缓存能起到缓冲的作用,把程序经常使用的信息存放到缓存中,当需要...
4.4.4. 二级缓存与查询缓存 4.4.5. 查询语言中的替换 4.4.6. Hibernate的统计(statistics)机制 4.5. 日志 4.6. 实现NamingStrategy 4.7. XML配置文件 4.8. J2EE应用程序服务器的集成 4.8.1. 事务策略配置 ...
从一个基础程序入手,讲述Hibernate的基本语法与配置,慢慢升高到缓存、延迟加载等高级特性。本书内容深入浅出,先讲述持久层设计与ORM,再由Hibernate概述、Hibernate基础Hibernate高级特性顺序展开,直至Hibernate...
内容涵盖安装 Hibernatetools 插件、Session 核心方法、持久化对象生命周期、对象关系映射、检索策略、检索方式、Hibernate 一\二级缓存、管理 Session、批量处理等 Hibernate 企业级开发的核心技术。
内容涵盖安装 Hibernatetools 插件、Session 核心方法、持久化对象生命周期、对象关系映射(1-n、1-1、n-n、继承映射)、检索策略、检索方式(对象导航图、OID 检索、HQL、QBC、本地SQL)、Hibernate 一二级缓存、...
从一个基础程序入手,讲述Hibernate的基本语法与配置,慢慢升高到缓存、延迟加载等高级特性。本书内容深入浅出,先讲述持久层设计与ORM,再由Hibernate概述、Hibernate基础Hibernate高级特性顺序展开,直至Hibernate...
从一个基础程序入手,讲述Hibernate的基本语法与配置,慢慢升高到缓存、延迟加载等高级特性。本书内容深入浅出,先讲述持久层设计与ORM,再由Hibernate概述、Hibernate基础Hibernate高级特性顺序展开,直至Hibernate...
注:每个Session实例都有自己的缓存,这个Session实例的缓存只能被当前的工作单元访问。 (4)Query:执行数据库查询操作。要使用HQL(HibernateQueryLanguage)查询语句,HQL查询语句是面向对象的,它引用类名及类...
3.4.4. 二级缓存与查询缓存 3.4.5. 查询语言中的替换 3.4.6. Hibernate的统计(statistics)机制 3.5. 日志 3.6. 实现NamingStrategy 3.7. XML配置文件 3.8. J2EE应用程序服务器的集成 3.8.1. 事务策略配置 ...
因此可以部分数据从数据库中抽取出来放到应用端以文本方式存储, 或者使用框架(Mybatis, Hibernate)提供的一级缓存/二级缓存,或者使用redis数据库来缓存数据 。负载均衡是应用中使用非常普遍的一种优化方法,它的...
10.2.2应用一级缓存 214 10.2.3应用二级缓存 214 10.2.4应用第三方缓存 216 10.3项目实战——借还图书 217 本章小结 224 课后练习 224 第11章spring框架基础 226 11.1spring框架概述 226 11.1.1认识spring...
3.4.4. 二级缓存与查询缓存 ............................................. 43 3.4.5. 查询语言中的替换 ............................................... 43 3.4.6. Hibernate 的统计(statistics)机制 ...........
3.4.4. 二级缓存与查询缓存 ............................................. 43 3.4.5. 查询语言中的替换 ............................................... 43 3.4.6. Hibernate 的统计(statistics)机制 ...........
自1998年首次发布以来,MySQL以其卓越的性能、可靠性和可扩展性,成为全球范围内Web应用程序、企业级解决方案以及其他各种数据处理场景的首选数据库平台之一。 以下是对MySQL数据库的详细介绍: 核心特性与优势 ...
在本教程中,我将向大家展示如何使用Spring FrameWork作为服务器端以及React JS作为客户端来构建全栈Web应用... Hibernate包括表之间的关系(一对一,一对多,多对一,多对多),双向实体关系,二级缓存(可选)。 编
│ Java面试题58:hibernate的缓存.mp4 │ Java面试题59.webservice的使用场景.mp4 │ Java面试题60.Activiti的简单介绍.mp4 │ Java面试题61.linux的使用场景.mp4 │ Java面试题62.linux常用命令.mp4 │ Java面试题...