[Mybatis] 자동화된 트랜잭션 관리(Declarative Transactions) 예제

자동화된 트랜잭션 관리(Declarative Transactions)를 사용하려면 Spring Framework와 함께 MyBatis를 통합해야 합니다. Spring의 @Transactional 애노테이션을 사용하여 트랜잭션을 선언적으로 관리할 수 있습니다. 아래는 자동화된 트랜잭션 관리 예제입니다.

예제: 자동화된 트랜잭션 관리

  1. Spring 프로젝트 설정:

    먼저 Spring 프로젝트를 설정합니다. 이를 위해 Spring Boot를 사용하는 것이 편리합니다.

  2. Spring Boot 의존성 추가:

    Maven 또는 Gradle 프로젝트에 Spring Boot 및 Spring JDBC 의존성을 추가합니다.

<!-- Maven 의존성 예시 -->
<dependencies>
    <!-- Spring Boot Starter -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter</artifactId>
    </dependency>
    
    <!-- Spring JDBC -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-data-jpa</artifactId>
    </dependency>

    <!-- MyBatis 및 MyBatis-Spring -->
    <dependency>
        <groupId>org.mybatis.spring.boot</groupId>
        <artifactId>mybatis-spring-boot-starter</artifactId>
        <version>2.2.0</version> <!-- 사용 가능한 최신 버전 사용 -->
    </dependency>
    
    <!-- 데이터베이스 드라이버 -->
    <dependency>
        <groupId>com.h2database</groupId>
        <artifactId>h2</artifactId>
    </dependency>
</dependencies>` 
  1. 데이터베이스 설정 및 MyBatis 매퍼 작성:

    데이터베이스 연결 설정과 MyBatis 매퍼 파일을 작성합니다.

  2. 서비스 및 DAO 클래스 작성:

    서비스 및 DAO(Data Access Object) 클래스를 작성하여 비즈니스 로직 및 데이터 액세스 작업을 수행합니다. 비즈니스 메서드에 @Transactional 애노테이션을 추가하여 트랜잭션을 선언적으로 관리합니다.

@Service
public class OrderService {

    @Autowired
    private OrderDao orderDao;

    @Transactional
    public void createOrder(Order order) {
        // 주문 생성 로직
        orderDao.insertOrder(order);
    }
}` 
@Repository
public class OrderDao {

    @Autowired
    private SqlSession sqlSession;

    public void insertOrder(Order order) {
        sqlSession.insert("com.example.OrderMapper.insertOrder", order);
    }
}` 
  1. 트랜잭션 관련 설정:

    @EnableTransactionManagement 애노테이션을 사용하여 트랜잭션 관리를 활성화합니다.

@SpringBootApplication
@EnableTransactionManagement
public class MybatisSpringApplication {

    public static void main(String[] args) {
        SpringApplication.run(MybatisSpringApplication.class, args);
    }
}` 
  1. application.properties 파일 설정:

    데이터베이스 연결 정보 및 MyBatis 설정을 application.properties 파일에 설정합니다.

spring.datasource.url=jdbc:h2:mem:testdb
spring.datasource.username=sa
spring.datasource.password=password
spring.datasource.driverClassName=org.h2.Driver

mybatis.configuration.map-underscore-to-camel-case=true` 
  1. Java 코드에서 사용:

    OrderService 클래스의 메서드를 호출하여 트랜잭션을 관리합니다.

@SpringBootApplication
@EnableTransactionManagement
public class MybatisSpringApplication {

    public static void main(String[] args) {
        SpringApplication.run(MybatisSpringApplication.class, args);
    }

    @Autowired
    private OrderService orderService;

    @EventListener(ApplicationReadyEvent.class)
    public void createOrder() {
        Order order = new Order();
        order.setOrderId(1);
        order.setCustomerName("Alice");
        order.setOrderDate(LocalDate.now());
        
        orderService.createOrder(order);
    }
}` 

위의 예제에서는 Spring Boot와 MyBatis를 함께 사용하여 자동화된 트랜잭션 관리를 구현합니다. @Transactional 애노테이션을 사용하여 트랜잭션 범위 내에서 비즈니스 메서드를 실행하고, Spring Boot의 설정과 의존성 주입을 활용하여 편리하게 프로젝트를 구성합니다.