Model Mapper
서로 다른 두 오브젝트의 필드값들을 자동으로 Mapping 시켜주는 라이브러리이다.
( DTO -> Entity, Entity -> DTO 변환에 사용 되며 map() 메소드를 통해 간단히 매핑을 할수 있다.)
- build.gradle의 dependencies에 'ModelMapper' 라이브러리 추가
dependencies {
implementation 'org.modelmapper:modelmapper:3.1.0'
}
- Config 디렉토리를 구성하고 RootConfig 클래스를 생성
@Configuration 어노테이션을 이용해서 Bean을 관리 가능
public class RootConfig {
//ModelMapper 객체를 스프링 컨테이너에 Bean 등록
@Bean
public ModelMapper getMapper() {
ModelMapper modelMapper = new ModelMapper();
modelMapper.getConfiguration()
.setFieldMatchingEnabled(true)
.setFieldAccessLevel(org.modelmapper.config.Configuration.AccessLevel.PRIVATE)
.setMatchingStrategy(MatchingStrategies.LOOSE);
//LOOSE 매핑시 필드명을 느슨하게 관리
return modelMapper;
}
}
- 필드값들을 매핑시켜줄 BoardDTO 클래스다.
public class BoardDTO {
private Long bno;
private String title;
private String content;
private String writer;
private LocalDateTime regDate;
private LocalDateTime modDate;
}
- BoradService인터페이스에 register() 선언
BoardService 인터페이스와 BoardServiceImpl클래스 추가
BoardServiceImpl은 ModelMapper와 BoardRepository를 주입받도록 구현
public interface BoardService {
Long register(BoardDTO boardDTO);
}
- BoradServiceImple은 ModelMapper와 BoardRepository를 주입받도록 구현
@Service
@Log4j2
@RequiredArgsConstructor
@Transactional
public class BoardServiceImpl implements BoardService{
private final ModelMapper modelMapper; //ModelMapper 주입
private final BoardRepository boardRepository; //BoardRepository 주입
@Override
public Long register(BoardDTO boardDTO) {
Board board = modelMapper.map(boardDTO, Board.class);
Long bno = boardRepository.save(board).getBno();
return bno;
}
}
- BoardServiceTests에 testRegister() 등록 기능 테스트 : CRUD 작업 처리
@SpringBootTest
@Log4j2
public class BoardServiceTests {
@Autowired
private BoardService boardService;
@Test
public void testRegister() { //insert문 동작 테스트
log.info(boardService.getClass().getName());
BoardDTO boardDTO = BoardDTO.builder()
.title("Sample Title...")
.content("Sample Content...")
.writer("user00")
.build();
Long bno = boardService.register(boardDTO);
log.info("bno: " + bno);
}
}
결과물
Model Mapper 매칭 전략
modelMapper.setMatchingStrategy(MatchingStrategies.STANDARD) // STANDARD 전략
modelMapper.setMatchingStrategy(MatchingStrategies.LOOSE) // LOOSE 전략
modelMapper.setMatchingStrategy(MatchingStrategies.STRICT) // STRICT 전략
- MatchingStrategies.STRICT
가장 엄격한 전략
타입과 필드명이 같을 때만 변환 - MatchingStrategies.LOOSE
가장 느슨한 전략
마지막 source 필드명에는 일치하는 토큰이 하나 이상 있어야 한다. - MatchingStrategies.STANDARD(default)
하나 이상의 토큰이 매칭되어야 한다.
토큰은 어떤 순서로든 일치될 수 있다.
'웹개발 > Spring Boot' 카테고리의 다른 글
[Spring Boot] RequestDisPatcher 와 sendRedirect (0) | 2024.02.08 |
---|---|
JPA N+1문제 @BatchSize로 해결하기 (2) | 2024.01.30 |
[Spring Boot ] REST방식 Swagger UI (0) | 2024.01.26 |
[Spring Boot] 인텔리제이 Log4j2 import 오류 (0) | 2024.01.25 |
[Spring Boot] 인텔리제이(intelliJ) 프로젝트 생성 (0) | 2024.01.23 |