Spring的JdbcTemplate and Transactions

2022-09-01 12:55:24

使用 JdbcTemplate 时,我是否需要显式配置事务?

我的代码布局如下所示:

我将有一个UserDao,它将注入到我的UserService中,然后我的控制器将调用我的UserService中的方法。

我希望在事务方面尽可能简单,并且我不需要多个数据库调用来跨越一个事务。

默认情况下,我是否必须在配置文件中执行任何操作或在任何地方使用注释?@Transaction

现在假设在我的控制器中,我需要在我的userService和accountService上进行2次调用,我可以以某种方式显式地将其包装在事务中吗?

userService.updateUser(user);
accountService.updateXXX(...);

答案 1

是的,不能替代事务管理。您仍然受益于数据库事务,因此将在数据库事务中运行,但如果失败,则不会回滚。JdbcTemplateuserService.updateUseraccountService.updateXXXuserService.updateUser

如果不想使用 AOP,可以改用事务模板。请参阅 Spring 参考文档中编程事务管理

我之前见过的一种模式是让 MVC 控制器类调用业务服务,该服务封装了操作。然后可以对业务类的方法进行注释。@Transactional


答案 2

如果你的控制器想要对用户和帐户做几件事,并在一个事务中完成所有这些事情,那么你应该有一个服务,用一种方法来完成所有这些事情。为每个DAO创建一个服务不是一个好主意,因为你最终会在DAO周围使用无所事事的包装器,并且处理速度会很慢,因为数据库将不得不为每次调用DAO创建一个单独的事务,你让它做的工作比它应该做的要多得多。

该服务应向控制器或调用它的其他任何人提供功能。我试图创建服务,其想法是服务提供对特定类型的用户有用的特定功能。


推荐