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 实例,每个线程最多只
能打开一个事务。

猜你喜欢

转载自blog.csdn.net/jiandanfeng2/article/details/6652107
今日推荐