[SpringBoot + JPA] Lombok @Builder 빌더패턴 적용기
- Coding/JPA
- 2021. 2. 13.
반응형
728x90
반응형
들어가기 전
Lombok을 사용하여 구현하기 전, 라이브러리를 사용하지 않고도 구현할 줄 알아야한다. 아래 포스팅을 참고하자.
도입
스프링부트 프로젝트에서 JPA를 사용하여 API를 만드는 상황에 놓였다. 나는 API의 파라미터로 받아올 DTO 파일을 생성하였고, JPA Repository로 보낼 Entity 파일을 생성하였다.
com.api.seohae
- dto
StudyDTO.java
- entity
Study.java
위 구조로 갔을 때 만나게 될 상황을 자세히 살펴보자.
빌더패턴의 적용 전, 읽고가기
빌더패턴을 사용함으로써 느낄 수 있는 이점은 아래 포스팅을 참고바란다.
빌더패턴 적용기 (with Lombok @Builder)
(1) StudyDto.java
import io.swagger.annotations.ApiParam;
import lombok.Data;
@Data
public class StudyDto {
private Long idx;
private String studyName;
private Long regUserIdx;
private Integer maxCnt;
private String startDate;
private String endDate;
}
Lombok 사용하기
(2) Study.java
import com.api.match.dto.StudyDto;
import io.swagger.annotations.ApiParam;
import lombok.AccessLevel;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import javax.persistence.*;
@Entity
@Data
@Table(name="STUDY")
@SequenceGenerator(
name="STUDY_SEQ_GN",
sequenceName="STUDY_SEQ",
initialValue=1,
allocationSize=1
)
@AllArgsConstructor
@NoArgsConstructor(access = AccessLevel.PROTECTED)
@Builder(builderMethodName = "StudyBuilder")
public class Study {
@Id
@GeneratedValue(
strategy= GenerationType.SEQUENCE,
generator="STUDY_SEQ_GN"
)
private Long idx;
private String studyName;
private Long regUserIdx;
private Integer maxCnt;
private String startDate;
private String endDate;
public static StudyBuilder builder(StudyDto studyDto) {
return StudyBuilder()
.idx(studyDto.getIdx())
.studyName(studyDto.getStudyName())
.regUserIdx(studyDto.getRegUserIdx())
.maxCnt(studyDto.getMaxCnt())
.startDate(studyDto.getStartDate())
.endDate(studyDto.getEndDate());
}
}
Lombok의 @Builder 어노테이션으로 빌더패턴을 구현한다.
@Builder(builderMethodName = "StudyBuilder")
builder 메소드명을 지정할 수 있다.
@NoArgsConstructor(access = AccessLevel.PROTECTED)
매개변수가 없는 기본 생성자를 무조건 선언해줘야하기 때문에 이 또한 Lombok의 어노테이션을 사용하자. 접근 권한은 PROTECTED로 지정하여 어느 곳에서나 객체를 생성할 수 있는 상황을 막는다.
@AllArgsConstructor
모든 매개변수를 갖고있는 생성자도 Lombok의 어노테이션을 사용한다.
public static StudyBuilder builder(StudyDto studyDto) {
return StudyBuilder()
.idx(studyDto.getIdx())
.studyName(studyDto.getStudyName())
.regUserIdx(studyDto.getRegUserIdx())
.maxCnt(studyDto.getMaxCnt())
.startDate(studyDto.getStartDate())
.endDate(studyDto.getEndDate());
}
매개변수로 받아온 StudyDto 안의 데이터를 매핑해준다.
builder 메서드 호출
Service.java 파일에서 builder 메서드 호출 코드
public Study addStudy(StudyDto studyDto) {
/* dto -> entity builder */
Study study = Study.builder(studyDto).build();
/* save (insert) */
study = studyRepository.save(study);
return study;
}
반응형
'Coding > JPA' 카테고리의 다른 글
SQL 중심의 개발 vs JPA (0) | 2021.07.30 |
---|---|
JPA 처음 적용해보기 (with persistence.xml, EntityManagerFactory) (1) | 2021.07.08 |
JPA로 원하는 매개변수로 findBy 메소드 생성하기 (1) | 2021.02.14 |
JPA의 기본개념과 장점 (ORM 프레임워크) (0) | 2021.02.13 |
[SpringBoot + JPA] DTO, Entity의 빌더패턴 적용기 (6) | 2021.02.05 |