如何使用 mapstruct 映射 DTO?

How Can I mapping DTOs using mapstruct?

我正在尝试使用 mapstruct 将实体数据映射到 DTO。 有了这些来源,我可以映射 id、title 数据。 但问题是....我无法使用这些来源映射用户名。

我该如何解决这个问题??

@Entity // DB와의 연결을 위하여
@Data   // getter setter
public class Board {
    @Id // id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    @NotNull
    @Size(min=2, max=30)
    private String title;

    @Length(min=20)
    @Lob
    @Column(columnDefinition="TEXT", nullable = false)
    private String content;

    @ManyToOne
    @JoinColumn(name="userId", referencedColumnName = "id")
    private User user;
}
@Builder
@AllArgsConstructor
@Data
public class BoardListDto {
    private Long id;
    private String title;
    private String userName;
}
@Mapper(componentModel = "spring")
public interface BoardListMapper extends EntityMapper<BoardListDto, Board> {
    @Override
    @Mapping(target = "userName", source = "user.name.value")
    List<BoardListDto> toDtos(List<Board> board);

}
public interface EntityMapper <D, E> {
    E toEntity(D dto);
    D toDto(E entity);

    // Entity업데이트 시 null이 아닌 값만 업데이트 하도록 함.
    @BeanMapping(nullValuePropertyMappingStrategy = NullValuePropertyMappingStrategy.IGNORE)
    void updateFromDto(D dto, @MappingTarget E entity);

    List<D> toDtos(List<E> entity);
}

无需为此实现 toDtos 方法。这段代码应该足够了,Mapstruct 将单独处理其余部分。

@Mapper(componentModel = "spring")
public interface BoardListMapper extends EntityMapper<BoardListDto, Board> {
    @Override
    @Mapping(target = "userName", source = "user.name")
    BoardListDto toDto(Board board);

}