json: 중간언어
request: json -> 자바 오브젝트
response: 자바 오브젝트 -> json
통신시
@Controller에서 request의 body를 json 형태로 받을 것
response시에는 자바 오브젝트를 json 형태로 바꿔서 던져줄 것
https://velog.io/@zhy2on/추상클래스-인터페이스-extends-implements
Entity에 의해 생성된 DB에 접근하는 메서드(ex) findAll()) 들을 사용하기 위한 인터페이스
JpaRepository<대상으로 지정할 엔티티, 해당 엔티티의 PK의 타입>
👍 https://whitepro.tistory.com/265
Data Access Object
Data Transfer Object
👍 https://ccomccomhan.tistory.com/35
DI(의존성 주입)를 위한 어노테이션
스프링컨테이너의 등록된 bean 중 알맞은 것을 대입해준다.
널 값을 배제하고 쿼리를 날려준다.
원래 role 컬럼디폴트 값을 'USER'로 해줬는데 @ColumnDefault("'USER'")
request json 데이터에 role이 null로 들어왔다면
쿼리에 null이 전달되기 때문에 컬럼디폴트 값이 설정되지 않는다. (role=null)
role에 대한 쿼리 자체가 없어야 함.
그래서 @DynamicInsert를 쓰면 널 값을 배제하고 쿼리를 날려주기 때문에 컬럼 디폴트 값이 잘 들어가게 된다.
그런데!
이렇게 어노테이션을 필요시마다 찾아서 이것저것 다 붙이다 보면 코드가 더럽고 좋지 않음.
그래서 그냥 @DynamicInsert도 빼고, @ColumnDefault("'USER'")도 빼고
UserRepository에서 회원가입시 setter로 role을 'USER'로 설정해서 넣을 수 있게 바꿔준다.
주소로 파라미터를 전달받을 수 있음
NULL값(또는 값)을 감싸서 던져주는 클래스
https://mangkyu.tistory.com/70
@GetMapping
👍 https://velog.io/@albaneo0724/Spring-Pagination과-Page-그리고-Pageable
?page=0
식으로 쿼리스트링 사용해주면 된다.
우와 앞으로 이렇게 써야겠다 마이클스콧 기법
@PutMapping
findById()로 해당 데이터 찾고
해당 데이터 오브젝트를 setter로 값을 바꿔준다.
그 다음 save()
근데 이 방법 말고 업데이트할 때는 더티체킹을 사용할 거다~
@Transactional: 함수 종료시에 자동 commit이 됨
영속성 컨텍스트에 들어오는 걸 영속화 된다고 함.
위 코드에선 findById(select)로 데이터를 가져올 때 해당 id의 데이터가 영속화 된다.
그 다음 가져온 user 오브젝트의 값을 setter로 변경 하고 함수가 끝났는데
@Transactional 어노테이션을 사용했기 때문에 save()를 하지 않아도 영속화된 오브젝트 값이 변경된 것을 감지해 update문을 수행한다.
@DeleteMapping
@ControllerAdvice로 해당 클래스로 모든 예외를 잡아올 수 있도록 해주고
@ExceptionHandler로 특정 예외에 대한 메소드를 만들게 하는 거 같음🤔