gpt4 book ai didi

java - Spring Transaction (@Transaction) 使用普通 JDBC,无需 JdbcTemplate

转载 作者:行者123 更新时间:2023-12-02 01:57:06 29 4
gpt4 key购买 nike

我有简单的 JDBC 代码,它使用连接接口(interface)进行事务管理。我想逐步切换到 Spring 事务管理。

首先,我想为我的数据源提供 PlatformTransactionManager 并使用 @Transaction 注释我的类/方法,并保持其他逻辑相同,即。使用连接/PreparedStatement等

我看到的所有示例都使用 JdbcTemplate。我想知道Spring Transaction可以在没有JdbcTemplate的情况下使用吗?

最佳答案

从技术上讲,可以使用 @Transactional没有JdbcTemplate 。但如果你尝试这样做,你迟早会发现你正在重新发明 JdbcTemplate 已经做过的事情。 .

什么@Transactional所做的是在执行 @Transactional 之前方法,它将帮助您获得 JDBC Connection来自DataSource ,并在此 Connection 上启动交易.JDBC Connection然后将存储在ThreadLocal中.

这意味着如果您在没有 JdbcTemplate 的情况下执行此操作,你必须手动获取这个Connection从那ThreadLocal这样您就可以创建一个 JDBC Statement从中执行 SQL。更不用说您必须手动释放 JDBC 资源,例如 Statement , ResultSet等等,由您自己正确处理,所有这些事情都已经由 JdbcTemplate 处理好。 .

但是如果您已经手动实现了这些 JDBC 代码并且只想让 @Transactional要处理事务,您可以尝试注入(inject) DataSource添加到您的 bean,然后使用以下方法获取 Connection供您的 JDBC 代码使用:

    Connection connection = DataSourceUtils.getConnection(dataSource);

还结帐JdbcTemplate#execute(ConnectionCallback<T> action) ,它对于迁移需要 JDBC Connection 的现有 JDBC 代码很有用。继续努力JdbcTemplate .

关于java - Spring Transaction (@Transaction) 使用普通 JDBC,无需 JdbcTemplate,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69515709/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com