Spring

[ Spring ] 트랜잭션 Transaction

hanjuCoding 2024. 8. 2. 10:47

트랜잭션포머

 

트랜잭션

  • 하나의 논리적 작업단위
  • member 테이블, hobby 테이블
    • 1 : N관계

 

기능 설정 방법

  1. xml 방식
  2. 자바 방식

⇒ 어노테이션을 쓰는건 xml, 자바 방식 둘 다 써야

@Transactional ( propagation = Propagation.REQUIRED)에서 @Transactional 만 사용하기 괄호생략)

928pg.

@RequestParam(”userID”)String useID 에서 userID끼리 이름이 같으니 생략 가능 → String userID로

  1. resources밑에 db.properties생성
db.driver = net.sf.log4jdbc.sql.jdbcapi.DriverSpy
db.url = jdbc:log4jdbc:oracle:thin:@192.168.0.18:1521:XE
db.username=testuser
db.password=user1234

   

   2. MvcConfig 추가

//db.properties에 있는 속성
	@Value("${db.driver}")
	private String driver;
	@Value("${db.url}")
	private String url;
	@Value("${db.username}")
	private String username;
	@Value("${db.password}")
	private String password;

	@Bean
	public PropertyPlaceholderConfigurer properties() {
		PropertyPlaceholderConfigurer config = new PropertyPlaceholderConfigurer();
		config.setLocation(new ClassPathResource("db.properties"));
		return config;
	}
	

 

 

@Transactional

메서드 안에 여러 트랜잭션이 있을경우 이를 하나의 트랜잭션으로 처리하라는 어노테이션이다.

(나중에 부트에서 또 나옴)

@Service
public class MemberService {
	@Autowired
	private MemberMapper mapper;
	
	@Transactional
	public boolean insert(MemberVO vo) {
		System.out.println("insert 전 : "+vo.getNo());
		int result = mapper.insert(vo);
		System.out.println("insert 후 : "+vo.getNo());
		if (result > 0) {
			// 취미 등록
			HobbyVO hvo = new HobbyVO();
			// member PK?
			hvo.setMember_no(vo.getNo());
			for (String name : vo.getHobbyname()) {
				hvo.setName(name);
				mapper.insertHobby(hvo);
			}
			return true;
		}
		return false;
	}
}
  • 클래스, 메소드에 @Transactional이 선언되면 해당 클래스에 트랜잭션이 적용된 프록시 객체 생성
  • 프록시 객체는 @Transactional이 포함된 메서드가 호출될 경우, 트랜잭션을 시작하고 Commit or Rollback을 수행

프록시

프록시는 서버와 클라이언트 사이에서 다리역할을 하는 물리적 가상 서버