Java @Transactional做什么?
我知道这可能是重复的,具有讽刺意味的是,在我开始到处阅读它之前,我认为我知道它的用途(不用说,但我还是会说,请纠正我的错误): 它使程序员不必使用Java @Transactional做什么?,java,spring,transactions,spring-jdbc,Java,Spring,Transactions,Spring Jdbc,我知道这可能是重复的,具有讽刺意味的是,在我开始到处阅读它之前,我认为我知道它的用途(不用说,但我还是会说,请纠正我的错误): 它使程序员不必使用transaction.begin()和commit() 如果您有一个方法调用两个DAO方法,这两个DAO方法通常都有一个事务。begin和事务。commit包含实际操作并调用它们,这将导致两个事务(如果之前的DAO方法也应该回滚,则可能会出现回滚问题) 但是如果在方法上使用@transactional,那么所有这些DAO调用都将被包装在一个begin
transaction.begin()
和commit()
如果您有一个方法调用两个DAO方法,这两个DAO方法通常都有一个
事务。begin
和事务。commit
包含实际操作并调用它们,这将导致两个事务(如果之前的DAO方法也应该回滚,则可能会出现回滚问题)
但是如果在方法上使用
@transactional
,那么所有这些DAO调用都将被包装在一个begin()
-commit()
周期中。当然,在使用@Transactional
的情况下,我认为DAO不能使用begin()
和commit()
方法 我建议您使用这个链接来解释Spring事务的所有内容
您还应该看到关于事务的相同属性(传播、回滚等),如果使用这些属性,事务行为可能会发生更改。您可以通过两种方式处理
事务:以编程方式和声明式
当您使用transaction.begin
和transaction.commit
和…,您正在以编程方式处理事务。通过这种方式,您可以更好地控制事务
边界,但最终会有大量类似的代码(交叉关注点
)散布在您的项目中
但是,以声明性的方式,处理事务的代码将与业务逻辑分离,不会分散在整个项目中。这是面向方面编程的主要概念之一
需要补充的一点是,如果您在方法中添加一些代码,如commit或begin programmaticly,它将起作用。事务只会将您的数据库连接更改为非自动提交。这与您所说的一模一样。很好,你接得很好!