[java] MyBatis에서 트랜잭션 롤백하는 방법

MyBatis는 자바를 위한 ORM(Object-Relational Mapping) 프레임워크로, 데이터베이스와의 상호작용을 쉽게할 수 있도록 도와줍니다. 트랜잭션은 데이터베이스 상태를 일관성 있게 유지하기 위한 중요한 개념입니다. 때때로 트랜잭션 중에 문제가 발생하여 롤백해야 할 수도 있습니다. 이번 블로그 포스트에서는 MyBatis에서 트랜잭션을 롤백하는 방법에 대해 알아보겠습니다.

1. @Transactional 어노테이션 사용

Spring Framework를 사용한다면, @Transactional 어노테이션을 사용하여 트랜잭션을 관리할 수 있습니다. MyBatis는 스프링의 트랜잭션 매니저를 사용하기 때문에, @Transactional 어노테이션만으로 트랜잭션을 롤백할 수 있습니다. 다음은 예시 코드입니다:

import org.springframework.transaction.annotation.Transactional;

@Transactional
public void doSomething() {
  // MyBatis 코드 실행
  ...
}

@Transactional 어노테이션을 메소드에 적용하면, 해당 메소드에서 실행되는 모든 MyBatis 코드는 하나의 트랜잭션으로 묶이게 됩니다. 만약 예외가 발생하면, 트랜잭션은 자동으로 롤백됩니다.

2. SqlSession.rollback() 메소드 사용

@Transactional 어노테이션을 사용할 수 없는 경우, 명시적으로 트랜잭션을 롤백하려면 SqlSession.rollback() 메소드를 사용할 수 있습니다. 다음은 예시 코드입니다:

SqlSession session = sqlSessionFactory.openSession();
try {
  // MyBatis 코드 실행
  ...
  session.commit(); // 트랜잭션 커밋
} catch (Exception e) {
  session.rollback(); // 트랜잭션 롤백
} finally {
  session.close(); // 세션 종료
}

SqlSession.rollback() 메소드를 호출하면, 해당 세션에서 실행되는 모든 작업이 롤백됩니다. 예외 발생 시 catch 블록에서 rollback() 메소드를 호출하여 트랜잭션을 롤백하면 됩니다.

참고 자료