ibatis中的事务问题

假如说我有三步:1操作数据库,2调用接口,3更新数据库,如果2部分操作失败我要想回滚1的操作,这个事务该如何写,写在action中... 假如说我有三步:1操作数据库, 2调用接口, 3更新数据库, 如果2部分操作失败我要想回滚1的操作,这个事务该如何写,写在action中 展开
 我来答
沙2011
推荐于2016-03-09 · TA获得超过1851个赞
知道小有建树答主
回答量:1043
采纳率:100%
帮助的人:784万
展开全部
你的假设有点问题 
事物是在操作数据库时使用的 




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层中添加了,数据库访问和接口访问的同步事务,还是谢啦
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式