Spring DATA JPA - Model Mapper

강상은·2023년 12월 5일
0

Spring

목록 보기
3/3

Model Mapper

객체의 필드 값을 다른 객체의 필드 값으로 자동으로 매핑

개요

  • JPA에서는 Entity와 DTO(Data Transfer Object)가 구분되어 사용
  • DTO form에서 입력한 데이터를 DB에 저장하는 경우 DTO -> Entity 변환 과정이 필요하며, DB에서 데이터를 조회하여 form 형태로 보여주는 경우 Entity -> DTO 변환 과정이 필요
  • 해당 과정들을 수행하기 위해서는 직접 객체에 필드 값을 세팅해야하는 반복적인 작업이 필요
  • get set을 이용하여 직접 필드 값을 채우는 과정을 반복적으로 수행
  • 이러한 반복적인 작업을 줄이기 위해 ModelMapper 사용

ModelMapper 사용

Dependency 추가

implementation 'org.modelmapper:modelmapper:3.1.0'
  @Override
    public PageResponseDTO<ReplyDTO> getListOfBoard(Long bno, PageRequestDTO pageRequestDTO) {

        Pageable pageable = PageRequest.of(pageRequestDTO.getPage() <=0? 0: pageRequestDTO.getPage() -1,
                pageRequestDTO.getSize(),
                Sort.by("rno").ascending());

        Page<Reply> result = replyRepository.listOfBoard(bno, pageable);

        List<ReplyDTO> dtoList =
                result.getContent().stream().map(reply -> modelMapper.map(reply, ReplyDTO.class))
                        .collect(Collectors.toList());

        return PageResponseDTO.<ReplyDTO>withAll()
                .pageRequestDTO(pageRequestDTO)
                .dtoList(dtoList)
                .total((int)result.getTotalElements())
                .build();
    }
  • ModelMapper 객체 생성
  • map 메서드에 변경할 객체와 변경하고 싶은 클래스를 인자로 전달
  • Reply 엔터티를 ReplyDTO로 매핑

매칭 전략

@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.STRICT);


        return modelMapper;
    }
}
  • MatchingStrategies.STANDARD(default)

  • 모든 destination 객체의 property 토큰들은 매칭 되어야 한다.

  • 모든 source 객체의 property들은 하나 이상의 토큰이 매칭되어야 한다.

  • 토큰은 어떤 순서로든 일치될 수 있다.

  • MatchingStrategies.STRICT

  • 가장 엄격한 전략

  • source와 destination의 타입과 필드명이 같을 때만 변환

  • 의도하지 않은 매핑이 일어나는 것을 방지할 때 사용

  • MatchingStrategies.LOOSE

  • 가장 느슨한 전략

  • 토큰을 어떤 순서로도 일치 시킬 수 있다.

  • 마지막 destination 필드명은 모든 토큰이 일치해야 한다.

  • 마지막 source 필드명에는 일치하는 토큰이 하나 이상 있어야 한다.

0개의 댓글