ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • MapStruct 의 @Mapper 사용에 대해 알아보자!
    Server/Spring Boot 2025. 4. 16. 11:37
    728x90
    반응형

    🛠️ Mapper 인터페이스 작성 & 사용 예제

    1. Entity, DTO 클래스 예시

    // User 엔티티
    public class User {
        private Long id;
        private String username;
        private String email;
        // getter/setter 생략
    }
    
    // UserDto
    public class UserDto {
        private String username;
        private String email;
        // getter/setter 생략
    }
    

    2. Mapper 인터페이스 작성

    import org.mapstruct.Mapper;
    import org.mapstruct.Mapping;
    
    @Mapper(componentModel = "spring")
    public interface UserMapper {
    
        // Entity → DTO
        UserDto toDto(User user);
    
        // DTO → Entity
        User toEntity(UserDto userDto);
    }
    

    ✅ Tip: 이름이 같은 필드는 자동 매핑됩니다.
    이름이 다르거나 변환 로직이 필요할 경우 @Mapping 어노테이션을 사용하세요.

    3. 실제 사용 예제 (Service 계층)

    @Service
    public class UserService {
    
        private final UserRepository userRepository;
        private final UserMapper userMapper;
    
        public UserService(UserRepository userRepository, UserMapper userMapper) {
            this.userRepository = userRepository;
            this.userMapper = userMapper;
        }
    
        public UserDto getUserDtoById(Long id) {
            User user = userRepository.findById(id)
                    .orElseThrow(() -> new RuntimeException("사용자 없음"));
    
            return userMapper.toDto(user);
        }
    
        public void saveUser(UserDto userDto) {
            User user = userMapper.toEntity(userDto);
            userRepository.save(user);
        }
    }
    

    🧩 @Mapper 주요 속성 설명

    속성명 설명
    componentModel spring, jsr330, cdi, default 중 선택.
    Spring Bean으로 등록하고 싶다면 spring 사용.
    uses 다른 Mapper를 내부적으로 사용하는 경우 명시.
    예: @Mapper(uses = AddressMapper.class)
    imports static 메서드 등을 매핑에 활용하기 위해 클래스 import 가능.
    unmappedTargetPolicy 매핑되지 않은 필드에 대한 경고 설정. IGNORE, WARN, ERROR 가능.
    nullValueMappingStrategy null 값 처리 방식 지정. RETURN_NULL, RETURN_DEFAULT 등 사용 가능.

    💡 추가 팁

    • 컴파일 시 자동으로 UserMapperImpl 클래스가 생성됩니다.
    • @Mapping 어노테이션을 활용하면 필드명이 다른 경우도 쉽게 매핑할 수 있습니다.
    • 리스트 매핑도 아래처럼 쉽게 작성 가능해요:
    List<UserDto> toDtoList(List<User> users);
    
    728x90
    반응형

    댓글

Designed by Tistory.