Back-end/JPA
[JPA] MapStruct DTO <-> Entity
호비_hobi
2022. 3. 8. 23:31
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> {
}