반응형
JPA를 활용하는 웹어플리케이션개발을 하게되면 DTO와 Entity간 상호 변환을 해야 할때가 자주생긴다. 이를 편리하게 구현할수 있게 해주는 여러가지 라이브러리가 있지만 mapstruct를 사용하여 구현하였습니다
우선 아래와 같이 의존성 주입을 해줍니다
dependencies {
implementation 'org.mapstruct:mapstruct:1.5.3.Final'
annotationProcessor 'org.projectlombok:lombok-mapstruct-binding:0.2.0'
annotationProcessor 'org.mapstruct:mapstruct-processor:1.5.3.Final'
}
그런다음 기본 EntityMapper Interface를 생성해줍니다
public interface EntityMapper<D, E> {
E toEntity(final D dto);
D toDto(final E entity);
List<E> toEntity(List<D> dto);
List<D> toDto(List<E> entity);
@BeanMapping(nullValuePropertyMappingStrategy = NullValuePropertyMappingStrategy.IGNORE)
void updateFromDto(D dto, @MappingTarget E entity);
}
* updateFromDto의 경우 Setter를 이용하여 처리하기 때문에 Entity에 Setter를 설정해 놓지 않았다면 제대로 동작하지 않으니 참고하시면 될거 같습니다. 저는 해당 메소드를 제외하고 각 Entity마다 update하는 메소드를 따로 구현 했습니다
기본 EntityMapper를 상속받아서 각각 DTO와 Entity를 매핑합니다. 아래는 예제 코드입니다
@Mapper(componentModel = "spring")
public interface MemberMapper extends EntityMapper<MemberDTO, MemberEntity> {
MemberMapper MAPPER = Mappers.getMapper(MemberMapper.class);
}
맵퍼가 구성되었다면 아래코드처럼 활용하여 변환하면 간단하게 처리할수 있습니다
public MemberEntity mapperTest(MemberDTO memberDTO) throws Exception{
MemberEntity member = MemberMapper.MAPPER.toEntity(memberDTO);
}
반응형
'Spring' 카테고리의 다른 글
[Spring] @PostConstruct 활용한 초기 설정 (0) | 2023.02.27 |
---|---|
[Spring] Jasypt 사용시 @DataJpaTest 에러 (0) | 2023.02.24 |
[SpringBoot 3.0] Jasypt를 이용한 설정값 암호화 (0) | 2023.02.22 |
[Spring JPA] 복합키 적용하는 방법 (0) | 2023.02.19 |
[Spring JPA] 다건의 데이터 삭제시 성능 개선 (0) | 2023.02.19 |
댓글