트랜잭션
두 개 이상의 쿼리가 동작할 때, 한꺼번에 성공하던지, 하나라도 실패하면 다 실패하게!
즉, 살꺼면 같이 살고 죽을꺼면 같이 죽자! 이게 트랜잭션
<!-- 커밋, 롤백을 적용해주는 객체 -->
<bean id="transactionManager"
class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource"/>
</bean>
<!-- 트랜잭션 관련 어노테이션을 읽어들이는 객체 -->
<tx:annotation-driven transaction-manager="transactionManager"/>
import org.springframework.transaction.annotation.Transactional;
public class ChangePasswordService {
private MemberDAO memberDao;
public ChangePasswordService(MemberDAO memberDao) {
this.memberDao = memberDao;
}
@Transactional // 트랜잭션이 적용될 메서드
public void changePassword(String email, String oldPwd, String newPwd) {
Member member = memberDao.selectByEmail(email);
if(member == null) {
throw new MemberNotFoundException();
}
// 트랜잭션
// 두 개의 쿼리가 동작함. 두 개의 쿼리문이 하나의 동작처럼 작동하게.
memberDao.update2(member); // 1. 기존 회원의 이름을 변경
member = memberDao.selectByEmail(member.getEmail()); // 이름이 변경된 회원 정보 가져옴
member.changePassword(oldPwd, newPwd); // 2. 가져온 회원의 비밀번호 변경
memberDao.update(member); // 데이터베이스에 변경된 정보를 반영
}
}
'SPRING' 카테고리의 다른 글
스프링 - css / js 파일 import 하기 + servlet-context.xml (0) | 2020.10.02 |
---|---|
자바 request 객체의 메서드 (0) | 2020.09.30 |
Connection Pool / DataSource / JdbcTemplate / RowMapper (0) | 2020.09.29 |
XML 파일 생성하는 법 (0) | 2020.09.28 |
AOP - Around를 적용한 예제 (0) | 2020.09.25 |