본문 바로가기

Spring

MapStruct 사용법

정의

MapStruct는 Entity와 Dto간의 매핑을 지원하는 라이브러리이다.

 

종류

Entity와 Dto간의 매핑을 위해 지원하는 라이브러리는 크게 ModelMapper와 MapStruct가 있다.

 

특징 

MapStruct는 컴파일시 미리 생성된 구현체를 통해 Mapping하기 때문에 속도적인 측면에서 이점이 있다.

ModelMapper의 경우 리플렉션 기반으로 동작하기도 하고 퍼포먼스에 대한 이슈가 많은편

적용

 

public interface OrderAsInfoMapper {
    @Mapping(source = "id", target = "orderAsId")
    @Mapping(source = "orderAsSerial", target = "orderAsSerial", qualifiedByName = "SerialToString")
    OrderAsInfo.OrderAsSummary of(OrderAs orderAs);

    @Named("SerialToString")
    static String serialToString(Serial serial) {
        return serial.getValue();
    }
}

 

source 의 값을 target에 매핑하는 구조

  • orderAs.id 의 값을  OrderAsInfo.OrderAsSummary.orderAsId 에 매핑
  • orderAs.orderAsSerial 의 값을 OrderAsInfo.OrderAsSummary.orderAsSerial 값에 매핑
    • qualifiedByName 속성 값에 따라 @Named로 선언된 메소드와 연결하여 값을 집어넣을때 해당 메소드를 실행하여 target값을 넣는다.

컴파일된 코드

 

public class OrderAsInfoMapperImpl implements OrderAsInfoMapper {

    @Override
    public OrderAsSummary of(OrderAs orderAs) {
        if ( orderAs == null ) {
            return null;
        }

        OrderAsSummaryBuilder orderAsSummary = OrderAsSummary.builder();

        orderAsSummary.orderAsId( orderAs.getId() );
        orderAsSummary.orderAsSerial( OrderAsInfoMapper.serialToString( orderAs.getOrderAsSerial() ) );
        orderAsSummary.orderId( orderAs.getOrderId() );

        return orderAsSummary.build();
    }
}

 

 

 

 

 

'Spring' 카테고리의 다른 글

@Async 사용법  (0) 2021.09.15
MVC패턴과 동작방식  (0) 2020.11.18
Ioc/DI 제어의 역전/의존성 주입  (0) 2020.11.18