본문 바로가기

Back-end/JPA

[JPA] MapStruct DTO <-> Entity

MapStructEntity와 Dto 간에 변환할 때 자동으로 매핑시켜 변환되도록 도와주는 라이브러리입니다.

 

MapStruct는 구성 접근법에 대한 규약에 근거하여 Java Bean 종류 간의 매핑 구현을 크게 단순화한 code generator 입니다.

 

Entity와 Dto 간의 매핑을 위해 getter / setter 를 남발하며 직접 구현하는 것을 지원하는 라이브러리는 크게 ModelMapperMapStruct가 있습니다.

 

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> {
}

 

 

 

참고: https://jforj.tistory.com/95