1. startTransaction()
트랜잭션 시작, 트랜잭션 컨텍스트 생성 및 모든 SQL작업이 트랜잭션 내에서 수행됨
2. getCurrentConnection().setAutoCommit(false)
해당 연결 내의 자동 커밋 해제, commit() 호출 전까지는 변경 사항이 커밋되지 않음
3. startBatch()
배치 작업 시작, 이후 수행되는 SQL작업들은 배치에 추가되고 executeBatch()를 호출할 때 한 번에 실행됨
4. executeBatch()
배치 작업 실행, 추가된 배치를 실행함. 배치 내의 모든 SQL 작업을 데이터베이스에 전송하고 실행함
5. getCurrentConnection().commit()
현재 연결 내 작업 커밋, JDBC 연결의 커밋만을 수행함.
6. commitTransaction()
트랜잭션 커밋, startTransaction()으로 시작한 트랜잭션을 완료하고 변경사항을 영구적으로 저장
(내부적으로 getCurrentConnection().commit()을 호출함, 즉 해당 메소드를 쓰면 commit()을 쓸 필요가 없다.)
7. endTransaction()
트랜잭션 종료, startTransaction()으로 시작한 트랜잭션 컨텍스트 종료 및 자원 해제
8. getCurrentConnection().rollback()
트랜잭션 롤백, 현재 트랜잭션 내의 모든 변경사항 취소 및 데이터베이스 상태를 트랜잭션 시작 지점으로 되돌림
* addBatch() 메소드의 경우 JDBC에서 직접 배치를 사용하면 필요하지만, iBATIS나 MyBatis를 사용한다면 명시적으로 호출하지 않아도 배치 모드에서 SQL 작업을 자동으로 배치에 추가해주기 때문에 사용할 필요가 없음.
try {
getSqlMapClientTemplate().getSqlMapClient().startTransaction();
getSqlMapClientTemplate().getSqlMapClient().getCurrentConnection().setAutoCommit(false);
getSqlMapClientTemplate().getSqlMapClient().startBatch();
// 여러 개의 insert, update, delete 작업 수행
getSqlMapClientTemplate().getSqlMapClient().executeBatch();
getSqlMapClientTemplate().getSqlMapClient().getCurrentConnection().commit();
getSqlMapClientTemplate().getSqlMapClient().commitTransaction();
} catch (Exception e) {
getSqlMapClientTemplate().getSqlMapClient().getCurrentConnection().rollback();
throw e; // 예외를 다시 던져서 상위에서 처리하도록 할 수도 있음
} finally {
getSqlMapClientTemplate().getSqlMapClient().endTransaction();
}
https://ibatis.apache.org/docs/java/dev/com/ibatis/sqlmap/client/SqlMapClient.html
SqlMapClient
Returns a single threaded SqlMapSession implementation for use by one user. Remember though, that SqlMapClient itself is a thread safe SqlMapSession implementation, so you can also just work directly with it. If you do get a session explicitly using this m
ibatis.apache.org
https://github.com/mybatis/ibatis-2