SpringBoot

SpringBoot ModelMapper 라이브러리

심나라 2024. 1. 7. 15:18
728x90


서비스 계층의 파라미터와 리턴 타입은 DTO를 이용하지만 내부적으로는 엔티티 객체를 사용해야 하는 경우가 많기 때문에 DTO와 엔티티 간(DTO <-> 엔티티)간 처리를 수월하게 할 수 있는 ModelMapper를 활용하는 것이 편리합니다.

1. build.gradle 파일에 ModelMapper 라이브러리를 추가.

dependencies {
  ...
  implementation 'org.modelmapper:modelmapper:3.2.0'
  ...
}

 


2. ModelMapper 설정 (RootConfig.java 파일생성)

RootConfig는 스프링에서 설정 파일의 역할을 하는 @Configuration 어노테이션을 추가하고 ModelMapper를 설정합니다.

package com.shimnara.config;

import org.modelmapper.ModelMapper;
import org.modelmapper.convention.MatchingStrategies;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class RootConfig {
    @Bean
    public ModelMapper getMapper() {
        ModelMapper modelMapper = new ModelMapper();
        modelMapper.getConfiguration()
                .setFieldMatchingEnabled(true)
                .setFieldAccessLevel(org.modelmapper.config.Configuration.AccessLevel.PRIVATE)
                .setMatchingStrategy(MatchingStrategies.LOOSE);

        return modelMapper;
    }
}



3. Sevice 계층에서 ModelMapper 활용

@Service
@RequiredArgsConstructor
public class TodoServiceImpl implements TodoService {

    private final ModelMapper modelMapper;
    private final TodoRepository todoRepository;

    @Override
    public Long register(TodoDTO todoDTO) {
        // todoDTO 객체를 Todo 엔티티로 변환
        Todo todo = modelMapper.map(todoDTO, Todo.class);
        Todo savedDto = todoRepository.save(todo);
        return savedDto.getTno();
    }

    @Override
    public TodoDTO get(Long tno) {
        Optional<Todo> result = todoRepository.findById(tno);
        Todo todo = result.orElseThrow();
        // Todo 엔티티를 TodoDTO 객체로 변환
        TodoDTO dto = modelMapper.map(todo, TodoDTO.class);
        return dto;
    }
}



[참고자료]

  • 코드로 배우는 리액트 (회사에서 개발할 때 쓰는 리액트와 스프링 부트)

728x90