MapStruct는 Entity와 Dto 간에 변환할 때 자동으로 매핑시켜 변환되도록 도와주는 라이브러리입니다.
MapStruct는 구성 접근법에 대한 규약에 근거하여 Java Bean 종류 간의 매핑 구현을 크게 단순화한 code generator 입니다.
Entity와 Dto 간의 매핑을 위해 getter / setter 를 남발하며 직접 구현하는 것을 지원하는 라이브러리는 크게 ModelMapper와 MapStruct가 있습니다.
MapStruct는 컴파일 시 미리 생성된 구현체를 통해 Mapping 하기 때문에 속도적인 측면에서 이점이 있어 채택하게 되었습니다.
MapStruct가 ModelMapper 보다 장점이라고 생각되는 것
- 매핑 속도가 빠름
- 명시적임 (변수들이 어떻게 매핑되는지 확인 가능)
- 컴파일 단계에서 에러 확인 가능
- 변수 명의 제약이 덜함
GenericMapper interface
import java.util.List;
import org.mapstruct.BeanMapping;
import org.mapstruct.MappingTarget;
import org.mapstruct.NullValuePropertyMappingStrategy;
public interface GenericMapper<D, E> {
D toDTO(E e);
List<D> toDTO(List<E> e);
E toEntity(D d);
List<E> toEntity(List<D> d);
@BeanMapping(nullValuePropertyMappingStrategy = NullValuePropertyMappingStrategy.IGNORE)
void updateFromDTO(D dto, @MappingTarget E entity);
@BeanMapping(nullValuePropertyMappingStrategy = NullValuePropertyMappingStrategy.IGNORE)
void updateFromEntity(E entity, @MappingTarget D dto);
}
사용할 entity dto 마다 mapper 생성
@Mapper(componentModel = "spring")
public interface ScheduleMapper extends GenericMapper<ScheduleBasicDTO, ScheduleBasicEntity> {
}
'Back-end > JPA' 카테고리의 다른 글
[JPA] 복합 기본키 설정 (0) | 2022.03.08 |
---|---|
[JPA] 더티 체킹(Dirty Checking) 이란? (0) | 2022.03.08 |
[JPA] Fetch Type란? (0) | 2021.11.22 |
[JPA] N+1 문제가 발생하는 이유와 해결 방법 (0) | 2021.11.22 |
[JPA] JPA Propagation 전파 단계 (0) | 2021.11.22 |