Hibernate二级缓存机制与对象状态详解
需积分: 31 12 浏览量
更新于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 应用提供了全面的知识框架。
2019-04-26 上传
2010-05-13 上传
2013-09-30 上传
2019-04-26 上传
2019-04-26 上传
2021-04-12 上传
2021-07-02 上传
2021-06-25 上传
2021-06-04 上传
我的小可乐
- 粉丝: 26
- 资源: 2万+
最新资源
- 探索数据转换实验平台在设备装置中的应用
- 使用git-log-to-tikz.py将Git日志转换为TIKZ图形
- 小栗子源码2.9.3版本发布
- 使用Tinder-Hack-Client实现Tinder API交互
- Android Studio新模板:个性化Material Design导航抽屉
- React API分页模块:数据获取与页面管理
- C语言实现顺序表的动态分配方法
- 光催化分解水产氢固溶体催化剂制备技术揭秘
- VS2013环境下tinyxml库的32位与64位编译指南
- 网易云歌词情感分析系统实现与架构
- React应用展示GitHub用户详细信息及项目分析
- LayUI2.1.6帮助文档API功能详解
- 全栈开发实现的chatgpt应用可打包小程序/H5/App
- C++实现顺序表的动态内存分配技术
- Java制作水果格斗游戏:策略与随机性的结合
- 基于若依框架的后台管理系统开发实例解析