Spring的JdbcTemplate和Transactions

loy*_*low 18 java spring spring-mvc jdbctemplate

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

我的代码布局如下所示:

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

我希望尽可能简化事务,并且我不需要多个数据库调用来跨越事务.

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

现在说在我的控制器中我需要在我的userService和accountService上进行2次调用,我能否以某种方式明确地将其包装在事务中?

userService.updateUser(user);
accountService.updateXXX(...);
Run Code Online (Sandbox Code Playgroud)

Dav*_*ant 26

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

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

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

  • 哇,这就是事务的代码分配,@Transactional 肯定可以减少编写的样板代码! (3认同)
  • 如何将“AOP”与“jdbcTemplate”一起使用?我看到一些需要 `JpaTransactionManager` 依赖项的示例,但是 JPA 对于 `jdbcTemplate` 是否正确? (3认同)
  • 商业服务理念+1。恕我直言,如果每个人都这样做,生活会更容易。 (2认同)

Nat*_*hes 13

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

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