JPA insert
회원가입
먼저 테스트용으로 컨트롤러 생성한다.



JPA에 활용하여 데이터를 넣기위해서는 Repesitory 생성해야합니다.

package com.junho.blog.repository;
import org.springframework.data.jpa.repository.JpaRepository;
import com.junho.blog.model.User;
//DAO
// 자동으로 bean 등록이 된다.
// @Repository 생략가능
// 기본적인 CRUD 가 가능하다.
public interface UserRepository extends JpaRepository<User,Integer> {
}
이대로 실행하면 잘 됩니다.

하지만 role 값이 들어가지가 않았죠?
이거는

Insert 할때 null값으로 넣기때문입니다.
db에서 디폴트 값이 있다고 한들 null을 넣어버리면 그 값이 들어갑니다 따라서 null을 넣는 과정을 빼야합니다.





다른 방법으로는 @DynamicInsert 어노테이션을 활용하여 null인 필드를 제외시키는 방법이 있습니다. 하지만 어노테이션을 늘리는 건 좋은 방법이 되지는 않습니다. 나중에 개별로 처리하기가 어려워지기 때문입니다.
id값으로 select
조건 select

// {id} 주소로 파마레터를 전달 받을 수 있음
// http://localhost:8080/blog/dummy/user/3
@GetMapping("/dummy/user/{id}")
public User detail(@PathVariable int id ) { // 주소의 id값을 받아서 사용 할 수 있음
// user/4을 찾으면 내가 데이터베이스에서 못찾아오게 되면 user가 null이 될 수 있음
// 그럼 return null이 되니 프로그램 오류가 발생함.
// Optional로 User 객체를 감싸서 가져오는 방식으로 null인지 아닌지 판단해서 return 하는 게 나을 것입니다.
User user = userRepository.findById(id).orElseThrow(new Supplier<IllegalArgumentException>() {
@Override
public IllegalArgumentException get() {
// TODO Auto-generated method stub
return new IllegalArgumentException("해당 유저는 없습니다. id : "+id);
}
});
return user;
}

내부 FindById 메소드에서도 null일경우 IllegalArgumentException 로 날려버리라는 참고 내용이 있습니다.

IllegalArgumentException 은 메세지를 생성해주는 메소드입니다.

유저가 있을경우

유저가 없을경우입니다.
여기서 웹브라우저는 json타입으로 받았는데, 그 이유가 뭘까요?
_요청 : 웹브라우저
user 객체가 자바 오브젝트 변환 (웹브라이저가 이해할 수 있는 데이터) -> json(Gson 라이브러리) 이 순서를 원래 걸처야합니다
하지만 스프링부트는 MessageConverter라는 애가 응답시에 자동 작동하여 만약에 자바 오브젝트를 리턴하게 되면 MessageConverter 가 Jackson 라이브러리를 호출해서 user 오브젝트를 json으로 변환해서 브라우저에게 던져줍니다.
회원수정
update

// email,password 수정
@PutMapping("/dummy/user/{id}")
public User updateUser(@PathVariable int id, @RequestBody User requestUser) {
// @RequestBody : body에 붙어온 json 데이터를 -> java Object 변환
System.out.println("id : "+id);
System.out.println("password : "+requestUser.getPassword());
System.out.println("email : "+requestUser.getEmail());
User user = userRepository.findById(id).orElseThrow(new Supplier<IllegalArgumentException>() {
@Override
public IllegalArgumentException get() {
return new IllegalArgumentException("수정에 실패하였습니다.");
}
});
user.setPassword(requestUser.getPassword());
user.setEmail(requestUser.getEmail());
userRepository.save(user);
// save메소드에 user 값이 프라이머리 키인 id값이 있을경우 update
// save메소드에 user 값에 id가 없을경우 insert를 합니다
return null;
}
@Transactional
@Transactional



delete
delete

//localhost:8080/blog/dummy/user/{id}
// user 삭제
@DeleteMapping("/dummy/user/{id}")
public String deleteUser(@PathVariable int id) {
try {
userRepository.deleteById(id);
}catch(Exception e){
return "삭제에 실패하였습니다. 해당 id는 DB에 없습니다.";
}
return "삭제되었습니다. "+ id;
}