Spring的JdbcTemplate和Transactions

使用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

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

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