Spring + iBatis 조합으로 개발을 할 경우 트랜잭션 관리를 Spring에서 처리하면 쉽게 처리 할 수 있습니다.

하지만 간혹 자바 어플리케이션(배치 프로그램 등등)에서 framework에서 지원하는 트랜잭션이 아닌 iBatis의 트랜잭션으로 처리를 해야 할 경우가 있는데 그럴 때 사용하는 방법 입니다.



1. 사용자 정의 트랜잭션

try{
    //Connection, SqlMapSession setting
    conn = sqlMapClient.getDataSource().getConnection();
    conn.setAutoCommit(false);
    session = sqlMapClient.openSession(conn);

   
    //쿼리 실행
    session.update("user.userInfo");
   
    conn.commit();
}catch(Exception e){
    try{
        conn.rollback();
    }catch(SQLException se1){
        se1.printStackTrace();
    }
}finally{
    try{
        if(session != null){ session.close(); }
        if(conn != null){ conn.close(); }               

    }catch(SQLException se2){
        se2.printStackTrace();
    }
}



2. 로컬 트랜잭션

try{
    sqlMapClient.startTransaction();
   
    //쿼리 실행
    sqlMapClient.insert("user.userInfo");
    
    sqlMapClient.commitTransaction();
}finally{
    sqlMapClient.endTransaction();
}

로컬 트랜잭션의 경우 commitTransaction()이 실행되지 않고 바로 endTransaction()이 실행되면 자동으로 rollback이 된다. 따라서 따로 rollback을 작성하지 않아도 된다.(물론 rollback관련 메소드도 지원을 안해준다...ㅋㅋ)



+ Recent posts