[Spring] ModelMapper

박이레·2023년 7월 28일
0

Spring

목록 보기
9/12

DTO와 VO 둘 다 데이터를 담는 객체입니다. 그러나 목적과 사용 방법이 다릅니다. DTO와 VO의 차이가 궁금하다면..🧷

만약 Client로부터 DTO 객체를 받았는데, 이를 VO 객체로 변환하려면 modelMapper library를 사용하면 됩니다.


ModelMapper 추가

dependencies {
	implementation group: 'org.modelmapper', name: 'modelmapper', version: '3.0.0'
}

설정 파일 추가

singleton으로 사용하기 위해 class 대신 enum으로 선언했습니다.

import org.modelmapper.ModelMapper;
import org.modelmapper.config.Configuration;
import org.modelmapper.convention.MatchingStrategies;

public enum MapperUtil {
    INSTANCE;

    private ModelMapper  modelMapper;

    MapperUtil() {
        this.modelMapper = new ModelMapper();
        this.modelMapper.getConfiguration()
                .setFieldMatchingEnabled(true)
                .setFieldAccessLevel(Configuration.AccessLevel.PRIVATE)
                .setMatchingStrategy(MatchingStrategies.STRICT);
    }

    public ModelMapper get() {
        return modelMapper;
    }
}

DTO

@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class TodoDTO {

    private Long tno;
    private String title;
    private LocalDate dueDate;
    private boolean finished;
}

VO

@Getter
@Builder
@ToString
@AllArgsConstructor
@NoArgsConstructor
public class TodoVO {

    private Long tno;
    private String title;
    private LocalDate dueDate;
    private boolean finished;
}

modelMapper로 변환하기

① 먼저 ModelMapper 객체를 생성합니다.
② map()을 호출합니다.
map()은 실인수로 (변환하고자 하는 객체, 변환 후의 객체)를 넣어줍니다.

public enum TodoService {
    INSTANCE;

    private TodoDAO dao;
    private ModelMapper modelMapper;

    TodoService() {
        dao = new TodoDAO();
        modelMapper = MapperUtil.INSTANCE.get();
    }

    public void create(TodoDTO todoDTO) throws Exception {
        TodoVO todoVO = modelMapper.map(todoDTO, TodoVO.class);

        dao.create(todoVO);
    }
}
profile
혜화동 사는 Architect

0개의 댓글