Java 如何使用iBatis解决嵌套事务问题?
假设我的项目中有以下结构(我使用iBatis作为DAO):Java 如何使用iBatis解决嵌套事务问题?,java,transactions,ibatis,Java,Transactions,Ibatis,假设我的项目中有以下结构(我使用iBatis作为DAO): 所以,我的问题是,我如何解决这个问题?我的项目中有150多个事务,所以重写所有业务逻辑不是一个容易的解决方案。对于这种情况,有没有标准的方法?我应该在哪里查看?正是因为这个原因,DAO中不应该有事务逻辑 通常有一个服务层负责数据库连接和工作单元。它启动事务,调用所有参与的DAO,并在事务完成后进行清理 Spring框架使用方面来实现事务逻辑。您将拥有所有这些DAO的接口。Spring将生成一个以声明方式处理事务的代理。也许你可以使用这些
所以,我的问题是,我如何解决这个问题?我的项目中有150多个事务,所以重写所有业务逻辑不是一个容易的解决方案。对于这种情况,有没有标准的方法?我应该在哪里查看?正是因为这个原因,DAO中不应该有事务逻辑 通常有一个服务层负责数据库连接和工作单元。它启动事务,调用所有参与的DAO,并在事务完成后进行清理 Spring框架使用方面来实现事务逻辑。您将拥有所有这些DAO的接口。Spring将生成一个以声明方式处理事务的代理。也许你可以使用这些设计概念,即使你不使用Spring
或者只是学习春天。它很好地支持iBatis。好吧,接下来我要做的就是学习Spring。然而,我已经考虑到,将事务放入DAO中存在巨大的设计问题。这可能值得重构。考虑一下,如果事务逻辑位于一个位置而不是150个类中,那么代码会小多少。这就是面向方面编程可以为横切关注点做的事情。交易是其中之一;日志记录是另一个问题。你可能会发现,在春季iBatis中加入这一点并不像你想象的那么困难。也许不仅仅是一个有意见的人。你最了解自己的处境。
public class UsersManager {
public void do {
mySqlMapClient.startTransaction();
// my code here
mySqlMapClient.endTransaction();
mySqlMapClient.commitTransaction();
}
}
public class StatsManager {
public void do {
mySqlMapClient.startTransaction();
// my code here
mySqlMapClient.endTransaction();
mySqlMapClient.commitTransaction();
}
}
public class App {
public void do {
myUsersManager.do();
myStatsManager.do(); // here I get an exception, because the transaction is already started
}
}