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