Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
Tags
- 자바 stream
- 자바 암호화 복호화
- 개발자 면접
- 코딩테스트 연습
- 신입 개발자 자바 면접
- 샐러드
- 신입 개발자 면접 질문
- docker
- 프로그래머스
- docker image
- 식단일기
- Plating
- 도커
- Linux
- 셰프의찾아가는구내식당
- 개발자 인턴
- .dockerignore
- 직장인점심구독
- 개발자 채용연계형인턴
- 개발자 면접 질문
- 신입 개발자 면접
- 플레이팅
- 프로그래머스 코딩테스트
- 신입 개발자 자바 면접 질문
- 식단
- 자바 암호화
- 신입 개발자 필수 면접 질문
- 개발자 코딩테스트
- 개발자 정규직
- 자바 암호화 알고리즘
Archives
- Today
- Total
달리는 두딘
[Spring] ModelMapper 본문
ModelMapper
http://modelmapper.org/
객체의 프로퍼티를 다른 객체의 프로퍼티로 맵핑해주는 유틸리티
ModelMapper 란 서로 다른 object 간의 필드 값을 자동으로 mapping 해주는 library
언제 사용할까?
예를들어 Springboot + jpa 로 개발할 경우 Entity 와 view layer에서 사용될 data object가 구분된다. 따라서 Entity의 값을 view layer에 전달할 경우 data object 로 새로 변환해주는 작업을 해야한다. 일반적으로 getter/setter 또는 Builder 패턴을 통하여 해당 작업을 할 경우 필드가 많을 수록 코드가 길어지고 반복적인 작업량이 늘어난다.
TestEntity testEntity = testRepository.findById("test");
TestDto testDto = new TestDto();
testDto.setEmail(testEntity.getEmail());
testDto.setGender(testEntity.getGender());
testDto.setId(testEntity.getId());
// ...
반복적인 object 간 변환을 간단하게 줄이고 싶을 때 ModelMapper 를 사용할 수 있다!
사용법
의존성 주입.
maven
<dependency>
<groupId>org.modelmapper</groupId>
<artifactId>modelmapper</artifactId>
<version>2.3.8</version>
</dependency>
gradle
implementation group: 'org.modelmapper', name: 'modelmapper', version: '2.3.8'
Spring Bean 등록
매번 ModelMapper 를 생성하여 사용할 수 있지만, 반복적으로 여러 로직에서 사용됨으로 @Bean 으로 등록하여 사용하자.
@Configuration
public class AppConfig {
@Bean
public ModelMapper modelMapper(){
return new ModelMapper();
}
}
사용 방법
data 의 원본이 되는 source 와 기존 객체에 매핍할 경우 해당 객체를, 새로운 객체를 생성할 경우 생성할 객체의 class 를 전달하면 된다.
TestEntity testEntity = testRepository.findById("test");
TestDto testDto = modelMapper.map(testEntity, TestDto.class);
// TestDto testDto = new TestDto();
// testDto.setEmail(testEntity.getEmail());
// testDto.setGender(testEntity.getGender());
// testDto.setId(testEntity.getId());
추가적으로 특정 필드 skip, Null인 필드, source와 destination 객체 간의 필드가 다를 경우 등 다양한 상황에 대한 handling 방법이 있다. 해당 내용은 http://modelmapper.org/ 에서 직접 확인 해보면서 사용하는 것이 좋다.
'지식노트' 카테고리의 다른 글
[DB] Connection Pool이란? (2) | 2022.08.08 |
---|---|
[WEB] JWT(Json Web Token)란? (2) | 2022.07.15 |
[JAVA] 빌더 패턴 (Builder Pattern), @Builder (2) | 2022.07.13 |
[JAVA] Cipher, 자바의 암호화&복호화를 담당하는 클래스 (2) | 2022.07.11 |
[WEB] 자바의 암호화와 복호화 (2) | 2022.07.11 |