Table of Content
MapStruct 사용하기 고급
DTO – Entity 준비
@Setter
@Getter
@NoArgsConstructor
@Entity
public class TestBrands {
private String brandId;
private String partnerId;
private String brandName;
private String useyn = "Y";
private String partnerId2;
}
@Getter
@Setter
@NoArgsConstructor
public class TestBrandsDto {
private String brandId;
private String partnerId;
private String brandName;
private String useyn;
private String brandName2;
}
스프링과 mapstruct 을 사용할 경우 componentModel = "spring"
을
반드시 붙여주어야 오류가 발생하지 않는다.
@Mapper(componentModel = "spring")
public interface TestBrandsMapper {
TestBrands toEntity(TestBrandsDto dto);
TestBrandsDto toDto(TestBrands entity);
}
일치하지 않는 필드 무시하기
ReportingPolicy.IGNORE
를 설정해서 일치하지 않는 필드를 무시할 수 있다.
@Mapper(componentModel = "spring", unmappedTargetPolicy = ReportingPolicy.IGNORE)
public interface TestBrandsMapper {
TestBrands toEntity(TestBrandsDto dto);
TestBrandsDto toDto(TestBrands entity);
}
무시할 필드를 명시할 수 있다.
@Mapper(componentModel = "spring")
public interface TestBrandsMapper {
@Mapping(target = "partnerId2", ignore = true)
@Mapping(target = "useyn", ignore = true)
TestBrands toEntity(TestBrandsDto dto);
@Mapping(target = "brandName2", ignore = true)
@Mapping(target = "useyn", ignore = true)
TestBrandsDto toDto(TestBrands entity);
}
일치하지 않는 필드를 수동으로 매핑
@Mapper(componentModel = "spring")
public interface TestBrandsMapper {
@Mapping(source = "partnerId", target = "partnerId2")
@Mapping(target = "useyn", ignore = true)
TestBrands toEntity(TestBrandsDto dto);
@Mapping(source = "brandName", target = "brandName2")
@Mapping(target = "useyn", ignore = true)
TestBrandsDto toDto(TestBrands entity);
}
상속받은 클래스 매핑
@SuperBuilder
를 붙여준다.
@Getter
@SuperBuilder
class BaseDto {
private Long id;
}
@SuperBuilder
@Getter
@ToString
public class UserDto extends BaseDto {
private String name;
private String lastName;
private String username;
private String password;
private String profilePicturePath;
}
Embedded class 를 쪼개서 매핑하고 싶을 때
Embedded class 의 변수명과 점을 붙여준다.
@Mapper(unmappedTargetPolicy = ReportingPolicy.IGNORE, componentModel = "spring")
public interface ItemOptionToSearchServiceConverter {
@Mapping(source = "id.itemId", target = "itemId")
@Mapping(source = "id.itemOption", target = "itemOption")
@Mapping(target = "id", ignore = true)
SearchItemOptionEntity convert(SrcItemOptionEntity srcItemOptionEntity);
}