Spring的JdbcTemplate和事务


问题内容

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

我的代码布局如下所示:

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

我想使事务尽可能简单,并且不需要多个数据库调用来跨越事务。

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

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

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

问题答案:

是的,JdbcTemplate不能替代事务管理。您仍然可以从数据库事务中受益,因此userService.updateUser可以在 数据库
事务中进行操作,但是如果accountService.updateXXX失败,userService.updateUser不会 回滚。

如果您不想使用AOP,则可以改用TransactionTemplate。请参阅Spring参考文档中的程序化事务管理

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