트랜잭션
- 하나의 논리적 작업단위
- member 테이블, hobby 테이블
- 1 : N관계
기능 설정 방법
- xml 방식
- 자바 방식
⇒ 어노테이션을 쓰는건 xml, 자바 방식 둘 다 써야
@Transactional ( propagation = Propagation.REQUIRED)에서 @Transactional 만 사용하기 괄호생략)
928pg.
@RequestParam(”userID”)String useID 에서 userID끼리 이름이 같으니 생략 가능 → String userID로
- 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을 수행
프록시
프록시는 서버와 클라이언트 사이에서 다리역할을 하는 물리적 가상 서버
'Spring' 카테고리의 다른 글
[ Spring ] MyBatis (0) | 2024.08.02 |
---|---|
[ Spring ] DI, IOC, AOP (0) | 2024.08.02 |
[ Spring ] 어노테이션 모음 (0) | 2024.08.02 |
[ Spring ] 스프링 기초, 의존성 주입 (0) | 2024.07.31 |