본문 바로가기

spring

트랜젝션 처리하기(연관된 일련의 작업이 실행도중 실패하면 그전 성공했던 작업을 취소하는 작업)

DemoController.java


package com.sp.demo;


import javax.servlet.http.HttpServletRequest;


import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.stereotype.Controller;

import org.springframework.web.bind.annotation.RequestMapping;

import org.springframework.web.bind.annotation.RequestMethod;


@Controller("demo.demoController")

public class DemoController {

@Autowired

private DemoService service;

@RequestMapping(value="/demo/write", method=RequestMethod.GET)

public String form(){

return "demo/write";

}

@RequestMapping(value="/demo/write", method=RequestMethod.POST)

public String submit(HttpServletRequest req, Demo demo){

String msg="추가 성공";

try{

service.insertDemo(demo);

}catch(Exception e){

System.out.println(e.toString());

msg="추가 실패.";

}

req.setAttribute("message", msg);

return "demo/write_ok";

}

}



=========================================================================================================================================================

DemoService.java


package com.sp.demo;


public interface DemoService {

public int insertDemo(Demo demo) throws Exception;

}

=========================================================================================================================================================

DemoServiceImpl.java

package com.sp.demo;


import org.springframework.transaction.annotation.Propagation;

import org.springframework.transaction.annotation.Transactional;


@Transactional(readOnly=true)

public class DemoServiceImpl implements DemoService {

private DemoDAO demoDao;

public void setDemoDao(DemoDAO demoDao){

this.demoDao = demoDao;

}

@Override

@Transactional(propagation=Propagation.REQUIRED, rollbackFor={Exception.class}) // 롤백처리하는 어노테이션

public int insertDemo(Demo demo)  throws Exception{ // 오버라이드 할때는 예외를 뺄순 있어도 추가할수는 없다. 쓰려면 interface를 수정해야한다.

int result=0;

try{

demoDao.insertDemo(demo);

result=1;

}catch(Exception e){

throw e;

}

return result;

}

}

=========================================================================================================================================================
Demo.java

package com.sp.demo;

public class Demo {
private String name,birth,tel;
private int id;
public int getId() {
return id;
}

public void setId(int id) {
this.id = id;
}

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

public String getBirth() {
return birth;
}

public void setBirth(String birth) {
this.birth = birth;
}

public String getTel() {
return tel;
}

public void setTel(String tel) {
this.tel = tel;
}
}

=========================================================================================================================================================
DemoDAO.java

package com.sp.demo;

import org.apache.ibatis.session.SqlSession;
import org.mybatis.spring.support.SqlSessionDaoSupport;

public class DemoDAO extends SqlSessionDaoSupport {
public void insertDemo(Demo demo) throws Exception{
try{
SqlSession sqlSession=getSqlSession();
sqlSession.insert("demo.insertDemo1",demo);
sqlSession.insert("demo.insertDemo2",demo);
sqlSession.insert("demo.insertDemo3",demo);
}catch(Exception e){
throw e;
}
}
}

=========================================================================================================================================================