如何创建不同的事务管理器以及它们如何链接到相关资源 需要同步到事务(例如同步到 JDBC 、 Hibernate 、 等等)现在应该很清楚了。本节介绍应用程序代码 (直接或间接,通过使用 JDBC、Hibernate 或 JPA 等持久性 API) 确保正确创建、重用和清理这些资源。该部分 还讨论了如何通过 相关。DataSourceTransactionManagerDataSourceHibernateTransactionManagerSessionFactoryTransactionManagerspring-doc.cn

高级同步方法

首选方法是使用 Spring 最高级别的基于模板的持久性 集成 API,或者将本机 ORM API 与事务感知工厂 bean 一起使用,或者 用于管理本机资源工厂的代理。这些交易感知解决方案 内部处理资源创建和重用、清理、可选事务 资源的同步和异常映射。因此,用户数据访问代码 不必处理这些任务,但可以专注于非样板 持久化逻辑。通常,您使用原生 ORM API 或采用模板方法 用于 JDBC 访问。这些解决方案将在后续 部分。JdbcTemplatespring-doc.cn

低级同步方法

诸如 (for JDBC)、(for JPA)、(for Hibernate) 等类存在于较低级别。当您需要 应用程序代码直接处理本机持久性 API 的资源类型, 使用这些类来确保获得正确的 Spring Framework 托管实例, 事务是(可选)同步的,并且过程中发生的异常是 正确映射到一致的 API。DataSourceUtilsEntityManagerFactoryUtilsSessionFactoryUtilsspring-doc.cn

例如,在 JDBC 的情况下,而不是传统的 JDBC 调用 的方法,你可以改用 Spring 的类,如下所示:getConnection()DataSourceorg.springframework.jdbc.datasource.DataSourceUtilsspring-doc.cn

Connection conn = DataSourceUtils.getConnection(dataSource);

如果现有事务已经同步(链接)了连接,则 instance 返回。否则,方法调用会触发创建新的 连接,该连接(可选)与任何现有事务同步并进行 可在同一交易中供后续重用。如前所述,any 包装在 Spring Framework 中,一个 的 Spring 框架的未选中类型的层次结构中。这种方法 提供的信息比从 和 中轻松获得的信息要多 确保跨数据库甚至跨不同持久性技术的可移植性。SQLExceptionCannotGetJdbcConnectionExceptionDataAccessExceptionSQLExceptionspring-doc.cn

这种方法也可以在没有 Spring 事务管理(事务 synchronization 是可选的),因此无论您是否使用 Spring 事务管理。spring-doc.cn

当然,一旦您使用了 Spring 的 JDBC 支持、JPA 支持或 Hibernate 支持, 您通常不喜欢使用 或其他帮助程序类 因为您通过 Spring 抽象工作比直接使用 Spring 抽象要高得多 使用相关的 API。例如,如果使用 Spring 或 package 来简化 JDBC 的使用,则会进行正确的连接检索 在幕后,您无需编写任何特殊代码。DataSourceUtilsJdbcTemplatejdbc.objectspring-doc.cn

TransactionAwareDataSourceProxy

在最低级别存在类。这是一个 代理 ,它包装目标以添加对 Spring 管理的事务。在这方面,它类似于 Jakarta EE 服务器提供的事务性 JNDI 。TransactionAwareDataSourceProxyDataSourceDataSourceDataSourcespring-doc.cn

您几乎永远不需要或不想使用此类,除非存在 code 必须调用并传递标准 JDBC 接口实现。在 在这种情况下,此代码可能可用,但参与 Spring 管理 交易。您可以使用更高级别的 abstractions 的DataSourcespring-doc.cn