[Spring] - Model Mapper

Model Mapper

Entity를 DTO로 혹은 DTO를 Entity로 변환하기 위해 사용한다. (Entity 🔄 DTO)

⚙️ Setting

# build.gradle
dependencies {
    implementation 'org.modelmapper:modelmapper:3.1.1'
}
@Configuration
public class AppConfig {
    @Bean
    public ModelMapper modelMapper() {
        return new ModelMapper();
    }
}

🛠 Entity & DTO

@Entity
@SuperBuilder
@Getter @Setter
...
public class Post extends BaseEntity {
    private String title;
    private String content;
}
@Getter @Setter
public class PostDto {
    private String title;
    private String content;
}

ModelMapper를 사용하기 위해서는 @Getter, @Setter를 넣어주어야 한다.
모든 클래스에 @Getter, @Setter를 넣는 것이 부담된다면, 아래 예시처럼 넣어주면 된다.

DTOEntity매핑하고 싶으면, Entity@Setter, DTO@Getter를 넣어주면 된다.

✅ 사용 예시

ModelMapper를 사용하지 않는 상태에서는 보통 Builder를 이용해 매핑한다.

@Service
@RequiredArgsConstructor
public class PostService {

    private final PostRepository postRepository;

    public Post savePost(PostDto dto) {
        Post n = Post.builder()
                .title(dto.getTitle())
                .content(dto.getContent())
                .build();
        return postRepository.save(newPost);
    }
}

예시로 사용한 EntityDTO는 필드가 적지만, 실제 Entity에는 더 많은 필드가 존재한다.
이럴 경우 필드가 추가될 때마다 그에 맞도록 매핑을 해줘야하는 불편함이 있다.
하지만 ModelMapper를 사용하면 이런 불편함 없이 코드 한 줄로 매핑을 해줄 수 있다.

@Service
@RequiredArgsConstructor
public class PostService {

    private final PostRepository postRepository;
    private final ModelMapper modelMapper;

    public Post savePost(PostDto dto) {
        Post newPost = modelMapper.map(dto, Post.class);
        return postRepository.save(newPost);
    }
}

DTO ➡️ Entity

DTO dto = modelMapper.map(entity, DTO.class);

Entity ➡️ DTO

Entity entity = modelMapper.map(dto, Entity.class);

위 코드처럼 map(객체, 클래스)로 넣어주면 된다.
‘나는 해당 객체클래스매핑할 것이다.’

댓글남기기