@PutMapping("/dummy/user/{id}") public User updateUser(@PathVariableint id, @RequestBody User requestUser){ System.out.println("id :"+id); System.out.println("username: "+requestUser.getUsername()); System.out.println("password:"+requestUser.getPassword()); System.out.println("email:"+requestUser.getEmail()); User user = userRepository.findById(id).orElseThrow(()->{ returnnew IllegalArgumentException("수정 실패하였습니다."); }); user.setUsername(requestUser.getUsername()); user.setPassword(requestUser.getPassword()); user.setEmail(requestUser.getEmail()); userRepository.save(user); return user; }
Body에서 json 객체를 가져오기 위한 @RequestBody 어노테이션을 사용해서 객체에 할당한다.
일단 save메소드의 특징을 알아보자. 객체를 DB에 저장할 때, 해당 id가 이미 있으면, 그 객체 그대로 update한다! 즉 일부 속성을 변경하려 하면, 해당 id에 맞는 객체를 DB에서 찾아오고, 그 객체 필드를 수정하고 save해야 올바른 업데이트다.(이거 은근 귀찮다.)
save 메소드
id 없이 사용되면 insert id를 넘겨주고, DB에 해당 데이터 있으면 update id를 넘겨주고, DB에 해당 데이터 없으면 insert
2. @Transactional으로 update(더티 체킹)
save하지 않아도 업데이트 된다. 객체를 찾아서 값만 변경하면 반영된다!
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
@Transactional @PutMapping("/dummy/user2/{id}") public User updateUser2(@PathVariableint id, @RequestBody User requestUser){ System.out.println("id : "+id); System.out.println("username: "+requestUser.getUsername()); System.out.println("password : "+requestUser.getPassword()); System.out.println("email: "+requestUser.getEmail());
User user = userRepository.findById(id).orElseThrow(()->{ returnnew IllegalArgumentException("update fail!!!!!!!"); }); user.setUsername(requestUser.getUsername()); user.setPassword(requestUser.getPassword()); user.setEmail(requestUser.getEmail()); return user; }