假设我有一个使用 ibatis 2 和 spring 1 的应用程序。我有一个调用 dao 方法的外部类。如果运行以下代码会发生什么:
// external class
public void doSomething() {
try {
daoLayer.startTransaction();
daoLayer.firstOperation();
daoLayer.secondOperation();
} finally {
daoLayer.endTransaction();
}
}
// dao layer which extends from org.springframework.orm.ibatis.support.SqlMapClientDaoSupport.SqlMapClientDaoSupport
public void startTransaction() { sqlMap.startTransaction(); }
public void firstOperation() { sqlMap.update("someQuery"); }
public void secondOperation() { sqlMap.update("someOtherQuery"); }
public void endTransaction() { sqlMap.endTransaction(); }
- 这段代码会导致数据库连接泄露吗?
- 结束事务是否会在执行 startTransaction、firstOperation 和 secondOperation 方法的同一事务/数据库连接上运行?或者 dbcp/ibatis 可能会从池中选择不同的连接?
- 我可以做些什么来测试并确保所有操作都使用相同的连接并且事务正常工作?
- (通过编辑添加) - 如果我将所有逻辑移到 dao 中的单个方法中,会有什么变化吗?这样交易会更安全吗?