본문 바로가기
프레임워크

Mybatis-Spring 트랜잭션 처리

by do_ng 2020. 6. 15.

1.스프링에서 트랜잭션을 쓰기위한 XML 설정 

root-context.xml
child-context.xml

2.트랜잭션 처리의 예시 

 

회원이 게시판에 글을쓰면 회원에게 포인트 1점을 부여하겠다)

업무가 두가지로 나뉘어짐

(글을쓰는 업무 , 회원에게 포인트를 부여하는 업무 - 두개의 업무를 하나의 논리적인 단위로묶음 (트랜잭션 처리) ) 

 

-> 시작 

1. 회원이 글을 쓰고 글작성 완료 버튼을 누른다.(insert)

2. 회원에게 포인트 부여(update member set point = point + 1 where id='hong') 

-> 끝

( 글을쓰는 업무와 회원에게 포인트를 부여하는 업무 둘다 성공해야지 정상적으로 DB에 Commit됨 )

( 글쓰기 작성은 성공했는데 회원포인트 부여하는 업무에서 에러발생 - 두개의 업무중 둘중에 하나라도 안된다면 DB에 실반영되지 않고 Rollback 작업을 수행함 )

 

3.글쓰기 처리요청을 받는 컨트롤러 

customerservice.noticeReg() 함수를 호출해서 서비스에게 글쓰기 처리작업을 위임함

4.실제 글쓰기 작업이 수행되는 서비스단 

트랜잭션을 처리할 함수위에 @Transactional 걸어줌으로써 이함수는 트랜잭션을 기반으로 동작하고 있다는걸 명시함

 

noticedao.updateOfMemberPoint("hong") 메서드를 호출하게 되면 NoticeDao 인터페이스안에 있는 해당 메서드를 호출하는데 그함수와 매핑된 SqlMapper.xml 안에있는 SQL구문을 실행시킴 

 

NoticeDao.xml

NoticeDao 인터페이스 안에있는 메서드이름과 SqlMapper(NoticeDao.xml)에있는 id값의 이름이 똑같아야지 매핑이됨