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