如何创建不同的事务管理器以及如何将它们链接到相关资源
需要同步到事务(例如,JDBC、Hibernate、
等等)现在应该很清楚了。本节介绍应用程序代码如何
(直接或间接地,通过使用持久性 API,如 JDBC、Hibernate 或 JPA)
确保正确创建、重用和清理这些资源。该部分
还讨论了如何(可选)通过
相关。DataSourceTransactionManager
DataSource
HibernateTransactionManager
SessionFactory
TransactionManager
高级同步方法
首选方法是使用 Spring 最高级别的基于模板的持久性
集成 API,或者将本机 ORM API 与事务感知的工厂 Bean 一起使用,或者
用于管理本机资源工厂的代理。这些交易感知解决方案
内部处理资源创建和重用、清理、可选事务
资源同步和异常映射。因此,用户数据访问代码可以
不必处理这些任务,但可以专注于非样板
持久性逻辑。通常,您使用本机 ORM API 或采用模板方法
对于 JDBC 访问,请使用 .这些解决方案将在后续详细介绍
本参考文档的各部分。JdbcTemplate
低级同步方法
诸如 (用于 JDBC)、(用于 JPA)、(用于 Hibernate) 等类存在于较低的级别。当您想要
应用程序代码,用于直接处理本机持久性 API 的资源类型,
您可以使用这些类来确保获得正确的 Spring Framework 托管实例,
事务(可选)同步,过程中发生的异常是
正确映射到一致的 API。DataSourceUtils
EntityManagerFactoryUtils
SessionFactoryUtils
例如,在 JDBC 的情况下,而不是传统的 JDBC 调用方法
上的方法,你可以改用 Spring 的类,如下所示:getConnection()
DataSource
org.springframework.jdbc.datasource.DataSourceUtils
Connection conn = DataSourceUtils.getConnection(dataSource);
如果现有事务已具有与其同步(链接)的连接,则
返回实例。否则,方法调用将触发创建新的
连接,该连接(可选)与任何现有事务同步并建立
可在同一事务中进行后续重用。如前所述,任何都包装在一个 Spring 框架中,一个
Spring Framework 的未检查类型层次结构。这种方法
为您提供的信息比从 和
确保跨数据库甚至跨不同持久性技术的可移植性。SQLException
CannotGetJdbcConnectionException
DataAccessException
SQLException
这种方法也适用于没有 Spring 事务管理(事务 同步是可选的),因此无论您是否使用 Spring 都可以使用它 事务管理。
当然,一旦你使用了 Spring 的 JDBC 支持、JPA 支持或 Hibernate 支持,
您通常不喜欢使用或其他帮助程序类,
因为你通过 Spring 抽象工作比直接工作更快乐
使用相关 API。例如,如果使用 Spring 或包来简化 JDBC 的使用,则会发生正确的连接检索
在幕后,您无需编写任何特殊代码。DataSourceUtils
JdbcTemplate
jdbc.object
TransactionAwareDataSourceProxy
在最底层存在类。这是一个
代理 ,它包装目标以增加对
Spring 管理的事务。在这方面,它类似于 事务性 JNDI ,由 Jakarta EE 服务器提供。TransactionAwareDataSourceProxy
DataSource
DataSource
DataSource
您几乎永远不需要或不想使用此类,除非存在
必须调用代码并传递标准 JDBC 接口实现。在
在这种情况下,此代码可能是可用的,但正在参与 Spring 托管
交易。您可以使用更高级别的代码编写新代码
前面提到的抽象。DataSource