Programming/Spring

Spring(11) - Spring & Mybatis 실습2 : Transaction처리

코딩하는 포메라니안 2022. 5. 7. 23:10

0. Transaction처리 해주는 이유

transaction이란 DB의 작업 단위이다.

Spring에서 SqlSession을 관리할 때, default가 AutoCommit으로 되어있다.

Transaction관리자를 등록해서 DB에 작업을 했을 때, Exception이 없으면 commit하고, 있으면 알아서 rollback해주기 위해 사용된다.

 

 

 

1. Transaction library추가

pom.xml에 아래 코드를 추가해서 maven update를 해서 적용시킨다.

<!-- https://mvnrepository.com/artifact/org.springframework/spring-tx -->
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-tx</artifactId>
    <version>${org.springframework-version}</version>
</dependency>

 

 

 

2. Transaction 관리할 객체 생성&등록하기

1. namespace에 tx 추가하기

root-context.xml의 Namespaces에서 tx체크

 

 

 

2. Transaction 관리자 생성 & 등록 : root-context.xml

<!-- transaction manager객체 생성 -->
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
    <property name="dataSource" ref="ds"></property> <!-- 해당 session의 transaction을 관리하겠다 -->
</bean>

 

 

3. Annotation으로 Transaction을 관리하겠다고 설정 : root-context.xml

<!-- annotation으로 관리하겠다 -->
<tx:annotation-driven transaction-manager="transactionManager"/>

 

 

 

3. Transaction관리할 곳 등록하기

ServiceImpl에서 DB에 변화를 주는 케이스에 annotation을 추가해준다.

@Transactional
@Override
public void registerUser(UserDto userDto) throws Exception {
    sqlSession.getMapper(UserDao.class).registerUser(userDto);
}