본문 바로가기
Spring

[Spring] mapstruct를 이용한 DTO <-> Entity 변환

by Apère 2023. 2. 22.
반응형

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);
}
반응형

댓글