Entity <-> Dto
mapping convering을 해주는 기능이다.
map()
메소드를 통해 Entity와 DTO의 변환을 자유롭게 해준다.
implementation 'org.modelmapper:modelmapper:2.4.2'
Service Layer, DTO, Entity에서 사용가능하다.
하지만 Service Layer에서 사용하는 것은 모든 서비스에서 객체를 사용할때마다 mapper의 중복이 발생하니 지양
Entity나 DTO에서 사용하는 것이 옳다.
DTO가 일반적
private final ModelMapper mapper//생성자 주입
private CommentDto mapToDto(Comment comment) {
/* return CommentDto.builder()
.id(comment.getId())
.name(comment.getName())
.email(comment.getEmail())
.body(comment.getBody())
.build();
.build();*/
return mapper.map(comment, CommentDto.class);
}
private Comment mapToEntity(CommentDto commentDto) {
/* return Comment.builder()
.id(commentDto.getId())
.name(commentDto.getName())
.email(commentDto.getEmail())
.body(commentDto.getBody())
.build();
.build();*/
return mapper.map(commentDto, Comment.class);
}
@Getter
@Setter
public class ItemFormDto {
private Long id;
@NotBlank(message = "상품명은 필수 입력 값입니다.")
private String itemNm;
@NotNull(message = "가격은 필수 입력 값입니다.")
private Integer price;
@NotBlank(message = "이름은 필수 입력 값입니다.")
private String itemDetail;
@NotNull(message = "재고는 필수 입력 값입니다.")
private Integer stockNumber;
private ItemSellStatus itemSellStatus;
private List<ItemImgDto> itemImgDtoList = new ArrayList<>();
private List<Long> itemImgIds = new ArrayList<>();
private static ModelMapper modelMapper = new ModelMapper();
public Item createItem() {
return modelMapper.map(this, Item.class);
}
public static ItemFormDto of(Item item) {
return modelMapper.map(item, ItemFormDto.class);
}
}
@Data
를 사용시에 오류가 발생@Setter
를 사용하는데 일반적으로 Setter을 통해 모든 필드를 여는 것는 OOP의 맞지 않다.Mapper보단 MapStruct을 더 많이 쓴다고 한다.
다시 정리하자