MapStruct 설정 (ModelMapper 대안)
ModelMapper가 많이 사용하고 사용하기 편하나 성능 이슈가 있고, 아래 URL을 통해 확인할 수 있다.
https://www.baeldung.com/java-performance-mapping-frameworks
따라서, 성능 이슈에 대응하기 위해 ModelMapper 대신 MapStruct를 대신 사용한다.
MapStruct 설정
build.gradle 파일에 아래 의존성 추가
implementation 'org.mapstruct:mapstruct:1.3.1.Final'
annotationProcessor "org.mapstruct:mapstruct-processor:1.3.1.Final"
Mapper interface 클래스 생성
- 아래 interface 생성시 프로젝트 빌드하는 경우 클래스명 + Impl 파일이 생성된다
- Mapping 어노테이션을 통해 entity의 값 model 매핑 설정이 가능하다.
- Model to Entity 설정도 가능
import org.mapstruct.Mapper;
import org.mapstruct.Mapping;
import org.mapstruct.factory.Mappers;
@Mapper
public interface NewsBoxContentsMapper {
NewsBoxContentsMapper INSTANCE = Mappers.getMapper(NewsBoxContentsMapper.class);
@Mapping(target = "video1", expression = "java(entity.getIsVideo1().equals(0) ? false : true)")
@Mapping(target = "video2", expression = "java(entity.getIsVideo2().equals(0) ? false : true)")
@Mapping(target = "video3", expression = "java(entity.getIsVideo3().equals(0) ? false : true)")
@Mapping(target = "video4", expression = "java(entity.getIsVideo4().equals(0) ? false : true)")
@Mapping(target = "video5", expression = "java(entity.getIsVideo5().equals(0) ? false : true)")
@Mapping(target = "video6", expression = "java(entity.getIsVideo6().equals(0) ? false : true)")
@Mapping(target = "video7", expression = "java(entity.getIsVideo7().equals(0) ? false : true)")
@Mapping(target = "video8", expression = "java(entity.getIsVideo8().equals(0) ? false : true)")
@Mapping(target = "ad3", expression = "java(entity.getIsAd3().equals(0) ? false : true)")
@Mapping(target = "ad4", expression = "java(entity.getIsAd4().equals(0) ? false : true)")
NewsBoxContents entityToDto(NewsBoxManageEntity entity);
}
실제 사용
NewsBoxContentsMapper.INSTANCE.entityToDto(newsBoxManageTopEntity);
출처: https://lovon.tistory.com/142 [Java 개발 블로그]
'JAVA > mapstruct, modelMapper' 카테고리의 다른 글
자바 코드 매핑 vs MapStruct vs ModelMapper (0) | 2022.04.22 |
---|---|
MapStruct - NullPointerException (0) | 2021.09.15 |