30. update 테스트
by 볼빵빵오춘기DummyControllerTest - updateUser()
- id, password 이메일 수정할 예정이다.
- form 태그 이용해서 데이터를 받아올 때 매개변수 앞에 @RequestBody붙이지 않아도 되지만 json으로 우회해서 받아올 것이기에 @RequestBody 붙여준다.
@PutMapping("/dummy/user/{id}")
public User updateUser(@PathVariable int id,@RequestBody User requestUser){
System.out.println("id : "+id);
System.out.println("password : "+requestUser.getPassword());
System.out.println("email : "+requestUser.getEmail());
return null;
}
Postman으로 Test
- @PutMapping("/dummy/user/{id}") Test한다.
- DB에 몇 번 아이디까지 있는지 확인하고 Test 진행한다.
DummyControllerTest - updateUser()
@PutMapping("/dummy/user/{id}")
public User updateUser(@PathVariable int id,@RequestBody User requestUser){
System.out.println("id : "+id);
System.out.println("password : "+requestUser.getPassword());
System.out.println("email : "+requestUser.getEmail());
user.setId(id);
userRepository.save(requestUser);
return null;
}
실행 결과
- username 이 null 에러가 뜬다.
- 우리는 password, email만 변경하기때문에 username 값을 따로 받지않았다.
그럼 강제적으로 username 값을 넣어주면 어떨까🤔?
DummyControllerTest - updateUser() - DB에 값 넣어보기 ⇒ 회원정보 변경 실패
@PutMapping("/dummy/user/{id}")
public User updateUser(@PathVariable int id,@RequestBody User requestUser){
System.out.println("id : "+id);
System.out.println("password : "+requestUser.getPassword());
System.out.println("email : "+requestUser.getEmail());
user.userName("test");
user.setId(id);
userRepository.save(requestUser);
return null;
}
실행 결과
해당 id값의 db 행을 찾아 username과 password, email 을 변경해주기는하나 role이나 createDate 등은 null 값이 된다.
DummyControllerTest - updateUser() - DB에 값 넣어보기 ⇒ 회원정보 변경 성공
@PutMapping("/dummy/user/{id}")
public User updateUser(@PathVariable int id,@RequestBody User requestUser){
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 user;
}
DummyControllerTest - updateUser() - DB에 값 넣어보기 ⇒ 회원정보 변경 성공, @Transactional 사용
@Transactional // 함수 종료시에 자동 commit이 됨.
@PutMapping("/dummy/user/{id}")
public User updateUser(@PathVariable int id,@RequestBody User requestUser){
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 user;
}
알 수 있는 점
- save() 함수는 id를 전달하지 않으면 insert
- save() 함수는 id를 전달하면 해당 id에 대한 데이터가 있으면 update
- save() 함수는 id를 전달하면 해당 id에 대한 데이터가 없으면 insert
- @Transactional 을 붙임으로써 save() 함수를 쓰지않았지만 변경 성공 how? 더티 체킹, 영속성 컨텍스트
'강의 따라하기 > blog' 카테고리의 다른 글
32. 삭제하기 테스트 (0) | 2024.01.02 |
---|---|
31. 영속성 컨텍스트와 더티체킹 (0) | 2024.01.02 |
29. 전체 select 및 paging 테스트 (0) | 2024.01.02 |
28. id로 select 테스트 (1) | 2024.01.02 |
27. 회원가입을 위한 enum 사용법 (0) | 2024.01.01 |
블로그의 정보
Hello 춘기's world
볼빵빵오춘기