Spring

MapStruct

꿀승 2025. 1. 2. 14:29
728x90
반응형
SMALL

MapStruct

  • Java 애플리케이션에서 객체 매핑을 컴파일 타임에 자동으로 생성해주는 라이브러리입니다. 이를 통해 객체 간의 매핑을 효율적으로 수행할 수 있습니다.
  • 객체 매핑을 컴파일 타임에 자동으로 생성해주어 성능과 타입 안전성 몇에서 뛰어남.

MapStruct 의존성 추가

implementation 'org.mapstruct:mapstruct:1.5.5.Final'
#롬복과 같이 사용시에 롬복 annotationProcessor 밑에 추가
annotationProcessor 'org.mapstruct:mapstruct-processor:1.5.5.Final'

빌더 사용 예시

    1. UserEntity
    @Getter
    @Entity
    @DynamicInsert
    @DynamicUpdate
    @NoArgsConstructor
    @Table(name = "users")
    @FieldDefaults(level = AccessLevel.PRIVATE)
    public class User {
    
     @Id
     @GeneratedValue(strategy = GenerationType.IDENTITY)
     Long id;
    
     @Column(nullable = false, length = 50)
     String username;
    
     @Column(nullable = false, unique = true, length = 255)
     String email;
    
     @Column(nullable = false, length = 255)
     String password;
    
     @Builder
     public User(
       String username,
       String email,
       String password,
     ){
       this.username = username;
       this.email = email;
       this.password = password;
     }
    }
    1. UserRequest/UserResponse
    @Getter
    @FieldDefaults(level = AccessLevel.PRIVATE)
    public class UserRequest {
    
     @NotBlank(message = "이름이 없습니다.")
     String username;
     @NotBlank(message = "이메일주소가 없습니다.")
     String email;
     @NotBlank(message = "패스워드가 없습니다.")
     String password;
    }
    
    --------------------
    
    @Getter
    @Builder
    @NoArgsConstructor
    @AllArgsConstructor
    @JsonInclude(Include.NON_NULL)
    @FieldDefaults(level = AccessLevel.PRIVATE)
    public class UserResponse {
    
     Long id;
     String username;
     String email;
    
    }
    1. UserMapper (MapStruct)
    @Mapper
    public interface UserMapper {
     UserMapper INSTANCE = Mappers.getMapper(UserMapper.class);
    
     //@Mapping(source = "username", target = "username")
     //빌더를 사용하지 않고, @Mapping 어노테이션으로 수동 사용가능
     UserResponse toResponse(User user);
    
     User toEntity(UserRequest userDTO);
    }
    1. 사용 예시
    public void create(UserRequest request) {
     User userRequest = UserMapper.INSTANCE.toEntity(request);
     userRepository.save(userRequest);
    }
728x90
반응형
LIST

'Spring' 카테고리의 다른 글

Spring Cloud MSA  (1) 2025.01.23
Flyway  (1) 2025.01.02
Undertow  (1) 2025.01.02
Spring Security 내부 필터  (1) 2024.10.24
Spring Security 내부 흐름  (0) 2024.10.22