프레임워크/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