public class ProductMapper {
public static ProductResponse toResponse(Product product){
return ProductResponse.builder()
.productId(product.getProductId())
.name(product.getName())
.price(product.getPrice())
.caption(product.getCaption())
.thumbnailImgUrl(product.getThumbnailImgUrl())
.detailImgUrl(product.getDetailImgUrl())
.build();
}
}
@Mapper
어노테이션 사용@Mapper
public interface ProductMapperMapStruct {
ProductMapperMapStruct PRODUCT_MAPPER = Mappers.getMapper(ProductMapperMapStruct.class);
// 매핑 인터페이스 정의
ProductResponse productToProductResponse(Product product);
}
// 기존 매퍼 사용 (보라색 부분)
public List<ProductResponse> getNewProducts() {
List<ProductResponse> list = new ArrayList<>();
List<Product> products = productRepository.findTop4ByOrderByProductIdDesc();
for (Product product : products) {
list.add(productMapper.toResponse(product));
}
return list;
}
// ------------------------------------------
// MapStruct 사용 (보라색 부분)
public List<ProductResponse> getNewProducts() {
List<ProductResponse> list = new ArrayList<>();
List<Product> products = productRepository.findTop4ByOrderByProductIdDesc();
for (Product product : products) {
ProductResponse productResponse = PRODUCT_MAPPER.productToProductResponse(product);
list.add(productResponse);
}
return list;
}
MapStruct 인터페이스를 정의하고 프로그램을 실행하면 다음과 같이 generated
폴더가 생긴다.
다음과 같이 인터페이스명Impl
클래스를 확인해보면 자동으로 인터페이스에서 정의한 메소드의 인자와 반환 값에 맞는 매핑 로직을 만들어준다.
@Generated(
value = "org.mapstruct.ap.MappingProcessor",
date = "2022-12-29T14:44:16+0900",
comments = "version: 1.5.3.Final, compiler: javac, environment: Java 17.0.5 (Oracle Corporation)"
)
public class ProductMapperMapStructImpl implements ProductMapperMapStruct {
@Override
public ProductResponse productToProductResponse(Product product) {
if ( product == null ) {
return null;
}
ProductResponse.ProductResponseBuilder productResponse = ProductResponse.builder();
productResponse.productId( product.getProductId() );
productResponse.name( product.getName() );
productResponse.price( product.getPrice() );
productResponse.caption( product.getCaption() );
productResponse.thumbnailImgUrl( product.getThumbnailImgUrl() );
productResponse.detailImgUrl( product.getDetailImgUrl() );
return productResponse.build();
}
}