ibatis中的事务问题
假如说我有三步:1操作数据库,2调用接口,3更新数据库,如果2部分操作失败我要想回滚1的操作,这个事务该如何写,写在action中...
假如说我有三步:1操作数据库, 2调用接口, 3更新数据库, 如果2部分操作失败我要想回滚1的操作,这个事务该如何写,写在action中
展开
1个回答
展开全部
你的假设有点问题
事物是在操作数据库时使用的
Consistency: 一致性
Isolation: 隔离性
Durability: 耐久性
iBatis中的事务分为:
Automatic Transaction
Local Transaction
Global Transaction
Custom Transaction
Automatic Transaction:
默认情况下iBatis认为每个statement都是一个事务
比如
public void runStatementsUsingAutomaticTransactions()
{
SqlMapClient sqlMapClient =
SqlMapClientConfig.getSqlMapClient();
Person p = (Person)
sqlMapClient.queryForObject("getPerson", // 第一个事务
new Integer(9));
p.setLastName("Smith");
sqlMapClient.update("updatePerson", p); //第二个事务
}
Local Transaction:
如果你想将几个statement作为一个事务来处理,可以用
startTransaction,endTransaction来划分事务
比如
public void runStatementsUsingLocalTransactions() {
SqlMapClient sqlMapClient =
SqlMapClientConfig.getSqlMapClient();
try {
sqlMapClient.startTransaction(); //事务开始
Person p =
(Person)sqlMapClient.queryForObject
("getPerson", new Integer(9));
p.setLastName("Smith");
sqlMapClient.update("updatePerson", p);
Department d =
(Department)sqlMapClient.queryForObject
("getDept", new Integer(3));
p.setDepartment(d);
sqlMapClient.update("updatePersonDept", p);
sqlMapClient.commitTransaction(); //提交事务,从开始到这里是一个事务
} finally {
sqlMapClient.endTransaction(); //事务结束
}
}
追问
我已经在service层中添加了,数据库访问和接口访问的同步事务,还是谢啦
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询