Hibernate二级缓存机制与对象状态详解
需积分: 31 75 浏览量
更新于2024-08-18
收藏 395KB PPT 举报
"本文主要介绍了Hibernate的二级缓存机制,并通过示例展示了其工作原理。同时,也涉及到了对象状态、检索策略、检索方式、延迟加载、Hibernate回调与拦截等核心概念。"
在 Hibernate 中,缓存是提高性能的关键机制,它分为一级缓存和二级缓存。一级缓存是指每个 Hibernate Session 内部的缓存,而二级缓存则是一种可插拔的全局共享缓存,可以在多个 Session 之间共享。
一级缓存是默认开启的,当我们在 Session 中通过 `session.get()` 方法获取对象时,如果该对象还没有被加载,Hibernate 将会执行 SQL 查询从数据库中获取对象并将其放入一级缓存。一旦 Session 关闭,一级缓存中的所有对象都会被清除。例如,我们首次调用 `session.get(Customer.class, 1l)` 时,会产生一条 SQL 语句去数据库中查询 Customer 对象,然后将结果放入缓存。当我们再次调用 `session.get(Customer.class, 1l)` 时,由于对象还在一级缓存中,所以不再需要查询数据库,可以直接从缓存中获取对象。
二级缓存是可选的,需要通过配置启用。它可以跨 Session 共享数据,减少对数据库的访问。在示例中,`<cache usage="read-write">` 配置表明 Customer 类将使用读写缓存策略。这意味着在多个 Session 中,即使关闭了当前 Session,对象仍然可能在二级缓存中存在。当我们重新打开 Session 并尝试获取同 ID 的 Customer 对象时,由于二级缓存的存在,不会再次执行 SQL 查询,而是直接从二级缓存中获取。
理解对象状态在 Hibernate 中至关重要。对象有三种状态:瞬时(Transient)、持久化(Persistent)和脱管(Detached)。瞬时对象未与 Session 绑定,持久化对象已与 Session 关联且存在于一级缓存中,而脱管对象曾是持久化对象,但 Session 已关闭,它们仍然在内存中,但与数据库失去了关联。
Hibernate 的检索数据的方式主要包括:HQL(Hibernate Query Language)、QBC(Query By Criteria)以及原生 SQL。HQL 是面向对象的查询语言,QBC 提供了一种基于 Java API 的查询方式,而原生 SQL 可以直接执行数据库特定的查询。
延迟加载(Lazy Loading)是 Hibernate 的另一个重要特性,允许我们按需加载关联的对象或集合,从而避免了加载大量不必要的数据。例如,Customer 可能关联着一个大型的 Order 集合,通过延迟加载,只有在真正需要 Order 数据时才会去查询数据库。
Hibernate 回调与拦截机制允许我们在特定操作前后执行自定义代码,如 `@PreUpdate` 和 `@PostLoad` 注解。这在数据同步和其他业务逻辑处理中非常有用。例如,我们可以利用这些回调方法来实现数据版本控制或者日志记录。
总结来说,本资源深入讲解了 Hibernate 的缓存机制,一级缓存如何减少数据库访问,二级缓存如何跨 Session 共享数据,以及对象状态、检索策略、延迟加载和回调拦截等关键概念,为理解和优化 Hibernate 应用提供了全面的知识框架。
我的小可乐
- 粉丝: 26
- 资源: 2万+
最新资源
- BottleJS快速入门:演示JavaScript依赖注入优势
- vConsole插件使用教程:输出与复制日志文件
- Node.js v12.7.0版本发布 - 适合高性能Web服务器与网络应用
- Android中实现图片的双指和双击缩放功能
- Anum Pinki英语至乌尔都语开源词典:23000词汇会话
- 三菱电机SLIMDIP智能功率模块在变频洗衣机的应用分析
- 用JavaScript实现的剪刀石头布游戏指南
- Node.js v12.22.1版发布 - 跨平台JavaScript环境新选择
- Infix修复发布:探索新的中缀处理方式
- 罕见疾病酶替代疗法药物非临床研究指导原则报告
- Node.js v10.20.0 版本发布,性能卓越的服务器端JavaScript
- hap-java-client:Java实现的HAP客户端库解析
- Shreyas Satish的GitHub博客自动化静态站点技术解析
- vtomole个人博客网站建设与维护经验分享
- MEAN.JS全栈解决方案:打造MongoDB、Express、AngularJS和Node.js应用
- 东南大学网络空间安全学院复试代码解析