Language/Java
[Java] ObjectMapping을 위한 MapStruct 알아보기 - 2
별토끼.
2021. 8. 12. 23:38
반응형
Intro
이전 포스팅에서는 MapStruct의 기본 개념과 가장 기본적인 적용에 대해서 알아보았다. 이번 포스팅에서는 실제 구현 시 유연하게 적용할 수 있는 방법들을 알아보도록 하자.
서로 다른 속성 매핑
이전에 사용했던 예제 코드를 활용해보자.
StudentDto
public class StudentDto {
private String name;
private String age;
private String level;
}
StudentEntity
public class StrudentEntity {
private String seq;
private String name;
private String age;
private String grade;
private String status = "Attending";
private OffsetDateTime createdDateTime = OffsetDateTime.now();
}
level을 age로 변환하려면 '@Mapping' annotation을 활용한다.
@Mapper
public interface StudentMapper {
@Mapping(source = "level", target="grade")
StudentEntity toStudentEntity(StudentDto studentDto);
}
객체 합치기
객체 두개를 하나의 엔티티에 합쳐야한다면 좀 더 복잡해진다. (실제로 고민을 많이 했던 부분이기도 하다)
위와 같은 학생 도메인으로, 학생들의 성적에 대한 객체를 매핑해야 한다면 어떻게 해야할까? 아래 코드는 StudentDto, TestInfo, 그리고 이 둘을 합쳐 생성해야 하는 StudentEntity가 있다.
StudentDto
public class StudentDto {
private String name;
private String age;
private String level;
}
ScoreEntity
public class TestInfo {
private String scoreAvg;
private Map<String, int> scoreParameter;
}
StudentEntity
private String seq;
private String name;
private String age;
private String grade;
private String status = "Attending";
private TestInfo testEntity;
private OffsetDateTime createdDateTime = OffsetDateTime.now();
그렇다면 아래와 같이 맵핑할 수 있다. (+ 도큐멘트를 참고해서 추가 설명이 필요할 것 같다)
@Mapper
public interface StudentMapper {
@Mapping(source = "TestInfo", target = "score")
StudentEntity toStudentEntity(ScoreEntity socreEntity, StudentDto studentDto);
}
반응형