此版本仍在开发中,尚不被认为是稳定的。对于最新的稳定版本,请使用 Spring Framework 6.2.10! |
ORM 与 Spring 简介
Spring Framework 支持与 Java Persistence API (JPA) 集成,并且支持原生 Hibernate 进行资源管理、数据访问对象 (DAO) 实现、和事务策略。例如,对于 Hibernate,有一流的支持几个方便的 IoC 功能,可以解决许多典型的 Hibernate 集成问题。您可以配置 OR(对象关系)映射的所有受支持功能通过依赖注入工具。它们可以参与 Spring 的资源和事务管理,并且它们符合 Spring 的通用事务和 DAO异常层次结构。推荐的集成风格是针对普通Hibernate 或 JPA API 编写 DAO。
当您创建时,Spring 为您选择的 ORM 层添加了显着的增强功能数据访问应用程序。您可以根据需要利用尽可能多的集成支持希望,您应该将这种集成工作与构建的成本和风险进行比较内部类似的基础设施。您可以像使用类似的内部基础设施一样使用大部分 ORM 支持库,无论技术如何,因为一切都被设计为一组可重用的JavaBeans。Spring IoC 容器中的 ORM 有助于配置和部署。 因此 本节中的大多数示例都显示了 Spring 容器内的配置。
使用 Spring Framework 创建 ORM DAO 的好处包括:
-
更容易测试。Spring 的 IoC 方法可以轻松交换实现和 Hibernate 的配置位置
SessionFactory
实例, JDBCDataSource
实例、事务管理器和映射对象实现(如果需要)。 这 反过来又使测试 隔离。 -
常见的数据访问异常。Spring 可以包装来自 ORM 工具的异常,将它们从专有(可能检查的)异常转换为通用运行时
DataAccessException
等级制度。 此功能可让您处理大多数持久性异常,这些异常是不可恢复的,仅在适当的层中,而没有烦人的样板捕获、抛出和异常声明。您仍然可以捕获并根据需要处理异常。请记住,JDBC 异常(包括特定于数据库的方言)也会转换为相同的层次结构,这意味着您可以在一致的编程模型中使用 JDBC 执行一些作。 -
通用资源管理。Spring 应用程序上下文可以处理 Hibernate 的位置和配置
SessionFactory
实例,JPAEntityManagerFactory
实例, JDBCDataSource
实例和其他相关资源。这使得这些值易于管理和更改。Spring 提供了高效、简单和安全的持久性资源处理。例如,使用 Hibernate 的相关代码通常需要使用相同的 HibernateSession
以确保效率和适当的事务处理。Spring 可以轻松创建和绑定一个Session
透明地传递到当前线程,通过公开当前Session
通过 HibernateSessionFactory
. 因此,Spring解决了典型 Hibernate 使用的许多长期问题,适用于任何本地或 JTA事务环境。 -
集成事务管理。您可以使用声明性的面向方面编程 (AOP) 样式方法拦截器来包装 ORM 代码,或者通过
@Transactional
注释或通过在 XML 配置文件。在这两种情况下,事务语义和异常处理 (回滚等)为您处理。如资源和事务管理中所述, 您还可以交换各种事务管理器,而不会影响与 ORM 相关的代码。 例如,您可以在本地事务和 JTA 之间进行交换,并使用相同的完整服务 (例如声明性事务)在这两种情况下都可用。此外 与 JDBC 相关的代码可以与用于执行 ORM 的代码完全事务集成。 这对于不适合 ORM 的数据访问非常有用(例如批处理和 BLOB 流),但仍需要与 ORM作共享公共事务。
获得更全面的 ORM 支持,包括对替代数据库的支持 MongoDB 等技术,您可能想查看 Spring Data 项目套件。如果你是 JPA 用户,则 Getting Started Accessing 来自 spring.io 的 JPA 指南数据提供了很好的介绍。 |