Ordinary
About

MapStruct

profileordilov / 2022. 1. 16

MapStruct

계층 간 데이터를 주고 받을 때 다른 객체로 변환해서 사용하는 일이 잦습니다.
이럴 때 모든 코드를 직접 만들어서 사용한다면 반복적이고 실수하기 쉽습니다.
이때 Object Mapping을 사용하면 간단하게 처리가 가능합니다.
그 중에서 MapStruct를 가장 많이 사용합니다.

사용법

@Mapper public interface CarMapper { CarMapper INSTANCE = Mappers.getMapper( CarMapper.class ); @Mapping(source = "numberOfSeats", target = "seatCount") CarDto carToCarDto(Car car); }

@Mapper 어노테이션을 인터페이스에 지정합니다.
이렇게 명시된 인터페이스에 따라 빌드 시 Object Mapping을 하는 클래스를 생성해줍니다.
기본적으로 멤버 변수가 같은 이름으로 생성됩니다.
다르게 사용하려면 해당 source에 바꿀 이름을 target으로 선택 가능합니다.

함수 사용법

변수 그대로가 아닌 변수가 가진 함수나 다른 함수로 매핑할 수 있습니다.

@Mapping(target = "creationDate", expression = "java(new java.util.Date())")

Spring에서 주입 받기

Mapper는 인터페이스이기 때문에 사용할 때 방법은 두 가지가 있습니다. 빌드되어 있는 구현체를 직접 생성해서 사용하거나 Spring에서 주입 받는 형태입니다. Spring에서 주입 받으려면 빈으로 등록해야합니다. 어노테이션으로 생성 방식을 spring으로 지정하면 가능합니다.

@Mapper(componentModel = "spring")