@Transactional是做什么的?

15

我知道这可能是重复的,具有讽刺意味的是,在我开始阅读关于它的资料之前,我认为我知道它的作用(不用说,但我仍会说,请在我错误时指出):

它可以使程序员免于使用transaction.begin()commit()
如果您有一个调用两个DAO方法的方法,这些方法通常每个方法都必须使用transaction.begin()transaction.commit()包含实际操作并进行调用,结果将产生两个事务(如果以前的DAO方法也应该回滚,则可能存在回滚问题)。

但是,如果您在方法上使用@Transactional,则所有那些DAO调用将被包装在单个begin()- commit()循环中。当然,如果您使用了@Transactional,DAO就不必使用begin()commit()方法。


1
要补充的一件事是,如果您在方法中添加了像提交(commit)或程序化(begin programmaticlly)之类的代码,它将起作用。事务(transactional)只会更改您的数据库连接以不自动提交。 - OQJF
就像你所说的那样。很好,你抓住了它! - Juan Bermudez
2个回答

12

你可以用两种方式处理 Transactions编程式(Programmatically)声明式(Declarative)

当你使用 transaction.begintransaction.commit 等等时,你是以编程式的方式处理你的 Transaction。这样你可以更好地控制你的 Transaction 边界,但你会得到很多类似的代码(Cross Cutting Concerns)散布在整个项目中。

但是以声明式的方式,处理 Transactions 的代码与你业务逻辑分离,不会散布在整个项目中。这是 Aspect Oriented Programming 的主要概念之一。


0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接