Backend/스프링부트
[Spring Boot] BaseEntity에 사용되는 @SuperBuilder와 @MappedSuperclass
Gaejirang-e
2022. 12. 6. 10:40
@SuperBuilder
한 번에 세팅하기 위해 자식클래스와 부모클래스 모두에 @SuperBuilder를 사용한다.
❓ 빌더 패턴
: 복합 객체의 생성과정과 표현방법을 분리하여,
동일한 생성절차에서 서로 다른 표현결과를 만들 수 있게 하는 패턴이다.
1. 생성자 파라미터가 많을 경우 가독성을 위해 사용
2. 순서가 상관없다
빌더x
Member member = new Member("member1", "{noop}1234", "nick", "user1@test.com")
빌더o
Member member = Member.builder()
.username("member1")
.password("{noop}1234")
.nickname("nick")
.email("user1@test.com")
.build();
@MappedSuperclass
BaseEntity
@Getter
@SuperBuilder // 자식클래스의 빌더를 이용하여 부모클래스의 필드(createDate, modifyDate)까지 한번에 세팅할 수 있다
@MappedSuperclass // 공통매핑정보(createDate, modifyDate)가 필요할 때, 부모클래스에 선언
@NoArgsConstructor(access = PROTECTED)
@EntityListeners(AuditingEntityListener.class) // Audit이란, 시간에 대해서 자동으로 값을 넣어주는 기능
@ToString
public class BaseEntity {
@Id
@GeneratedValue(strategy = IDENTITY)
private Long id;
@CreatedDate
private LocalDateTime createDate;
@LastModifiedDate
private LocalDateTime modifyDate;
}