티스토리 뷰

의존성 추가

   implementation 'org.mapstruct:mapstruct:1.4.2.Final'
   annotationProcessor 'org.mapstruct:mapstruct-processor:1.4.2.Final'

Entity와 Dto 구현

public abstract class TodoDto {

    @Getter
    @AllArgsConstructor
    @Builder
    public static class CreateRequest{
        private String title;
        private String description;
        private List<String> tags=new ArrayList<>();
    }

}
@Entity
@NoArgsConstructor
@AllArgsConstructor
@Data
@Builder
public class Todo{
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Integer todoId;

    private String title;

    private String description;

    private boolean isCompleted;

    private LocalDate createdAt;

    @ElementCollection
    private List<String> tags=new ArrayList<>();

    private LocalDate updatedAt;

    @Builder
    public Todo(String title, String description){
        this.title=title;
        this.description=description;
    }
}

Mapper 인터페이스 구현

@Mapper(componentModel = "spring")
public interface TodoMapper {

    @Mapping(target = "title", source = "createRequest.title")
    @Mapping(target="description", source="createRequest.description")
    @Mapping(target="tags", source="createRequest.tags")
    @Mapping(target="createdAt", expression="java(java.time.LocalDate.now())")
    @Mapping(target="updatedAt", expression="java(java.time.LocalDate.now())")
    
    Todo toEntity(TodoDto.CreateRequest createRequest);

}

source->target이라고 생각하면 된다.

지금은 dto->entity이므로 source에는 dto의 필드명을, target에는 entity의 필드명을 적으면 된다.

Id는 @GeneratedValue(strategy = GenerationType.IDENTITY)이므로 따로 매핑을 안해줘도 된다. 
그리고 bool값인 isCompleted는 매핑을 안해주면 false로 초기값이 설정된다.