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