对象关系映射 (ORM) 数据访问 (Object Relational Mapping (ORM) Data Access)
本节涵盖了在使用对象关系映射(ORM)时的数据访问技术。
Spring Framework 为多种 ORM 框架提供了集成支持,确保无论你选择哪种持久化策略,都能享受到 Spring 的一致性编程模型(如一致的异常体系和声明式事务管理)。
本节摘要
- Spring 中的 ORM 介绍
了解 Spring 为何支持 ORM 以及它带来的核心优势。 - 通用 ORM 集成注意事项
探讨在集成各种 ORM 框架时都需要考虑的共同点。 - Hibernate
详细介绍 Spring 对经典 Hibernate 框架的支持。 - JPA
重点介绍 Spring 强大的 Java Persistence API (JPA) 集成,这是现代企业级开发的首选。
补充教学
1. 为什么我们要使用 ORM?
在之前的 JDBC 或 R2DBC 章节中,我们手动编写 SQL 并在 Java 对象与数据库行之间转换。虽然这种方式灵活且高效,但在复杂的业务系统中,你会发现自己正在编写大量的重复代码。 ORM 的核心目标是让你“像操作 Java 对象一样操作数据库”。你只需定义实体(Entity),框架会自动帮你处理 SQL 生成、对象封装和关联查询(如 One-to-Many)。
2. Spring 在 ORM 中的角色:不仅仅是“胶水”
很多人误以为 Spring 只是把 Hibernate 或 JPA 粘合在一起。实际上,Spring 做了更多工作:
- 异常翻译:ORM 框架(如 Hibernate)有自己的异常体系。Spring 会将这些特定框架的异常统一转换为 Spring 的
DataAccessException体系。 - 资源管理:自动管理 Session 或 EntityManager 的开启与关闭,防止连接泄漏。
- 无缝事务:你可以通过
@Transactional无缝地在 JDBC 代码和 ORM 代码之间共享同一个数据库事务。
3. 我该选哪一个:Hibernate 还是 JPA?
这通常是一个容易混淆的问题:
- JPA (Java Persistence API) 是一个规范(Specification)。它定义了一套注解(如
@Entity,@Id)和 API 接口。 - Hibernate 是 JPA 的一个实现(Implementation)。 最佳实践:在项目代码中,你应该尽可能依赖 JPA 的标准 API。但在底层实现上,你可以放心地使用 Hibernate。Spring 对两者的支持都非常完美。