MapStruct

MapStruct 란?

  • 빈을 다른 빈에다가 매핑해준다.

    • 기존, POJO -> POJO 매핑하는데 드는 수고와 boilerplate를 없애줌

  • 흔히 사용하는 변환: DB에서 넘어온 엔티티에서 DTO로

  • 특징

    • 인터페이스만 생성하면 된다. 컴파일 시점, MapStruct가 자동으로 구현체 생성해준다.

메이븐 설정

빌드 시점 인터페이스에 대한 Impl 구현 위한 설정

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-compiler-plugin</artifactId>
    <version>3.5.1</version>
    <configuration>
        <source>1.8</source>
        <target>1.8</target>
        <annotationProcessorPaths>
            <path>
                <groupId>org.mapstruct</groupId>
                <artifactId>mapstruct-processor</artifactId>
                <version>1.4.2.Final</version>
            </path>
        </annotationProcessorPaths>
    </configuration>
</plugin>

기본 예제

코드

인터페이스 생성하기

인터페이스 생성만으로 끝

자동 생성된 Impl 예시

  • /target/generated-sources/annotations/ 에 생성됨

Test

  • source -> destination 으로 변환 테스트

스프링에서 사용시

만약, mapping 로직 내에서 다른 Spring 구성 요소를 활용해야 해야 할때, interface가 아닌 abstract 클래스 사용해야 한다.

2개 bean의 변수명이 다를 경우

자식 빈 까지

Type Conversion 이용하기

  • 시간 스트링을 Date 로

커스텀 mapper 만들기

BigDecimal -> Long 바꿔야함

  • 방법

    • abstract class 로 만들어야함

@BeforeMapping and @AfterMapping

  • 매핑 로직 발생 전후로 실행되게

  • ElectricCar, BioDieselCar -> CarDTO 로 변환 해보자

새로운 버전에서 Lombok 지원

defaultExpression 지원

참고자료

  • https://www.baeldung.com/mapstruct

Last updated