목차
개인 프로젝트 에서 단순 CRUD는 JPA로 구현하려고 많이 하고 있다.
역시 미래의 내가 보기위해 기록한다.
부끄럽지만 java8, JPA를 최근에 사용하게 되어서 @Builder 어노테이션도 처음 써보고 이제 막 적응이 살짝 되가는 중이다.(JPA에서는 엔티티에 setter 사용을 최대한 지양한다.)
@Entity에서 필요로 하는 것은 기본 생성자이고 @Builder에서 필요로 하는 것은 모든 필드를 전부 매개변수로 가지고 있는 생성자이다.(값 세팅하기 위해서)
둘 다 생략할 경우 IDE에서 친절하게 아래처럼 에러를 뱉어준다.(엔티티에 기본 생성자 없을 경우엔 컴파일 단계에서 표시) 빌더에 매개변수 생성자 없을 경우 빌드시 표시해준다.
Entity에서 @NoArgsConstructor 생략 시 아래처럼 에러가 표시된다.
lombok 어노테이션으로 생성자를 선언해주거나 직접 선언하거나 해야한다.
@Builder 사용 시 @AllArgsConstructor 생략 시 빌드시에 아래처럼 에러가 표시된다.
JPA의 Entity는 반드시 불변 객체여야 하므로 Getter만 사용해야 한다.
JPA의 핵심은 영속성이다.
그래서 값 세팅을 위해 세터가 아닌 @Builder를 이용하고 이 빌더란 친구는 반드시 모든 필드를 매개변수로 가지고 있는 생성자를 필요로 한다.
JPA의 엔티티는 기본 생성자를 필요로 한다.
그리고 @JsonNaming(value = PropertyNamingStrategy.SnakeCaseStrategy.class)는 클라이언트에 돌려줄 경우 값을 JSON네이밍으로 변경해서 돌려주기 위해서 사용했다.
서버 사이드에서는 Camel case를 쓰고 클라이언트 사이드에서는 Snake case를 쓰기 때문이다.
아래처럼 java의 카멜케이스 네이밍을 스네이크 네이밍으로 변환해서 돌려주기 위해서이다.
// java 필드 네이밍
private String memberId;
// js 필드 네이밍
let member_id
필드에 @JsonProperty("변환할 필드명")으로 선언해도 되는데 나중에 혹시나 필드가 더 많아질수 있으니 미리 클래스레벨에 @JsonNaming...를 선언했다.(사실 필드 몇개 안되지만 귀찮아서 그랬다.)
어노테이션이 코드 수를 많이 줄여주지만 사용해본 적이 없는 나 같은 사람은 역시 이를 사용하기 위해 공부를 해야 한다.
몰랐던 새로운 걸 알아가는 이 과정이 즐겁다.
뭔가를 사용할 때는 원리를 알고 쓰는게 좋으니 즐거운 마음으로 포스팅에 올린다.
아래의 어노테이션이 많은 코드를 줄여준다. 하지만 모르면 공부를 해야 한다.
@Getter
@NoArgsConstructor
@AllArgsConstructor
@Entity
@Builder
@Table(name = "test")
@JsonNaming(value = PropertyNamingStrategy.SnakeCaseStrategy.class)
개인 공부를 정리한 포스팅이라 틀린 점이 있을 수 있습니다.
틀린 점은 댓글로 부탁 드립니다.
'IT > development' 카테고리의 다른 글
[eclipse] eclipse java comment template 설정 (0) | 2022.11.23 |
---|---|
[spring] 의존성 주입 시 NPE(NullPointerException) (0) | 2022.11.23 |
[mybatis] mybatis 동적 쿼리 작성 시 "," 관련 (0) | 2022.11.22 |
[Spring] spring REST API 공부(feat. @RestController) (0) | 2022.11.22 |
[springBoot] 유효성 검증(feat. @Valid, Validated) (0) | 2022.11.22 |