반응형
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);
}
반응형
'Language > Java' 카테고리의 다른 글
[Java] 스트림(Stream) 개념과 연산 - 1 (0) | 2021.08.16 |
---|---|
[Java] ObjectMapping을 위한 MapStruct 알아보기 - 1 (0) | 2021.08.11 |
[Java] ExceptionHandler를 이용한 에러 처리 (0) | 2021.08.06 |
[Java] Java에서 날짜, 시간(Date, Time) 다루기 (0) | 2021.07.31 |
[JAVA] next() 와 nextLine() 차이점 (0) | 2018.05.25 |
댓글