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