프레임워크/Spring, Spring Boot
[메타코딩] 스프링부트 강좌 28강(블로그 프로젝트) - update 테스트
고용인
2022. 7. 28. 14:31
updateUser 메소드를 아래와 같이 생성합니다.
// save 함수는 id를 전달하지 않으면 insert를 해주고
// save 함수는 id를 전달하면 해당 id에 대한 데이터가 있으면 update를 해주고
// save 함수는 id를 전달하면 해당 id에 대한 데이터가 없으면 insert를 해요.
// email, password
@PutMapping("/dummy/user/{id}")
public User updateUser(@PathVariable int id, @RequestBody User requestUser) { // json데이터를 요청 => Java Object(MessageConvertor의 Jackson라이브러리가 변환해서 받아줘요.)
System.out.println("id : " + id);
System.out.println("password : " + requestUser.getPassword());
System.out.println("email : " + requestUser.getEmail());
User user = userRepository.findById(id).orElseThrow(()->{
return new IllegalArgumentException("수정에 실패하였습니다.");
});
user.setPassword(requestUser.getPassword());
user.setEmail(requestUser.getEmail());
userRepository.save(user);
return null;
}
RequestBody 어노테이션은 json데이터를 요청한것에 대하여 Java Object로 변환하여 받아줍니다.
이때 MessageConverter의 Jackson 라이브러리가 이 역활을 합니다.
save 메소드는 update도 되고 insert도 됩니다.
save 메소드를 이용한 update시 아래와 같이 먼저 해당 id에 따른 정보값을 찾은 후 그 정보값으로 다시 update를 해줍니다.
@Transactional
@PutMapping("/dummy/user/{id}")
public User updateUser(@PathVariable int id, @RequestBody User requestUser) { // json데이터를 요청 => Java Object(MessageConvertor의 Jackson라이브러리가 변환해서 받아줘요.)
System.out.println("id : " + id);
System.out.println("password : " + requestUser.getPassword());
System.out.println("email : " + requestUser.getEmail());
User user = userRepository.findById(id).orElseThrow(()->{
return new IllegalArgumentException("수정에 실패하였습니다.");
});
user.setPassword(requestUser.getPassword());
user.setEmail(requestUser.getEmail());
// 더티 체킹
return null;
}
Transactional 어노테이션을 붙이고 조회된 user에 수정하고자 하는 정보들을 지정하면, save메소드와 같은 역할을 진행합니다.
이걸 더티체킹이라 합니다.(자세한거든 다음 강의에서...)
강의 주소 : https://youtu.be/oijoJtiGPhI