java ibatis 事务_java和ibatis事务处理

java和ibatis一样,只要执行executeXXX()方法以后,默认自动提交事务,意味着每次调用executeXXX()方法,就是一个独立事务,但对于有些情况,比如转账,但从一个账户上把钱扣掉(其实是逻辑上删除了一条记录),在另一个账户增加存款额(其实是修改了记录),这2个操作应该是一个事务,要么发生,要么不发生,此时就应该把这2个操作定义为一个事务。

1、java只要把事务操作设置为不自动提交,通过手动提交就能实现事务的处理,代码如下:

package com.oracle;

import java.sql.Connection;

import java.sql.DriverManager;

import java.sql.ResultSet;

import java.sql.Statement;

/**

* java事务控制

* @author Administrator

*

*/

public class TestTrans {

/**

* @param args

*/

public static void main(String[] args) {

Connection ct = null;

try{

Class.forName("oracle.jdbc.driver.OracleDriver");

ct = DriverManager.getConnection("jdbc:oracle:thin:@172.17.40.227:1521:orcl","scott","tiger");

Statement sm = ct.createStatement();

//加入事务处理

ct.setAutoCommit(false);

sm.executeUpdate("update emp set sal=sal-100 where ename='SCOTT'");

//int i = 7/0;

sm.executeUpdate("update emp set sal=sal+100 where ename='SMITH'");;

//提交事务

ct.commit();

}catch(Exception e){

//如果发生异常就回滚

try{

ct.rollback();

}catch(Exception ex){

ex.printStackTrace();

}

e.printStackTrace();

}finally{

sm.close();

ct.close();

}

}

}

2、ibatis主要通过SqlMapClient类中的startTransaction()、commitTransaction()、endTransaction()、rollbackTransaction()这四个方法来实现事务的开始、提交、结束和回退。例子代码如下:

private Reader reader = new Resources.getResourceAsReader(

"com/ibatis/example/sqlMapconfig.xml");

private SqlMapClient sqlMap = XmlSqlMapBuilder.buildSqlMap(reader);

public updateItemDescription (String itemId, String newDescription) throws SQLException {

try {

sqlMap.startTransaction ();

Item item = (Item) sqlMap.queryForObject ("getItem", itemId);

item.setDescription (newDescription);

sqlMap.update ("updateItem", item);

sqlMap.commitTransaction ();

} finally {

sqlMap.endTransaction ();

}

}

注意:事务不能嵌套。在调用 commit()或 rollback()之前,从同一线程多次调用.startTransaction,将引起抛出例外。换句话说,对于每个 SqlMap 实例,每个线程最多只 能打开一个事务。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值