계속해서 Mapper와 Mapstruct를 사용해야하는데 전혀 이해가 안되있다.

의존성을 낮추기위해 dto보다 Mapper를 쓰고 Mapper는 mapstruct를 쓰면 더 쉽게 사용할 수 있다고한다.

 

Mapstruct를 숨쉬듯 사용할 수 있게 연습해보자.

 

MapStruct란?

type-safe bean mapping 클래스를 제공합니다.

Mapping의 내용을 일일히 적지 않아도 되어 개발 생산성이 높아지는 효과가 있습니다.

 

MapStruct 사용법

현재 진행하고 있는 최종 프로젝트(아마 Erd가 변경될 예정인)에서 제가 맡음 부분을 예시로 들겠습니다.

 

우선, Entity가 있어야 겠습니다. 

@Getter
@Entity
@NoArgsConstructor
public class CollaboRequest extends Timestamped {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private long id;

    @Column(nullable = false)
    private String title;

    @Column(nullable = false)
    private String contents;

    @Column(nullable = false)
    private String nickname;

    @Column(columnDefinition = "boolean default true")
    private Boolean activated;

    @Column(columnDefinition = "boolean default false")
    private Boolean approval;

    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "POST_ID")
    private Post post;

 

 

그다음엔 Mapper를 만들어봅시다.

 

 

@Mapper
public interface CollaboRequestMapStruct {
    CollaboRequestMapStruct COLLABOREQUEST_MAPPER = Mappers.getMapper(CollaboRequestMapStruct.class);
    CollaboRequest RequestCollaboRequestDtotoCollaboRequest (RequestCollaboRequestDto requestCollaboRequestDt);

}

@Mapper 어노테이션을 클래스명 위에 넣어줍니다.

 

여기서 Dto명은 RequestCollaboRequest입니다.

네이밍을 엄청 헷갈리게 하고 있는 것 같습니다만 지금은 어쩔수 없습니다. 

제가 만들고 있는 Entity 명이 CollaboRequest이기 때문입니다...

CollaboRequest의 RequestDto입니다.

CollaboRequestRequest보다는 덜 헷갈립니다.

 

 

아래는 RequestDto 입니다. 

@Builder를 사용해줬습니다.

 

public class RequestCollaboRequestDto {

    public String title;
    public String contents;


    public CollaboRequestDto tocollaboRequestDto(){
        return CollaboRequestDto.builder()
                .title(title)
                .contents(contents)
                .build();
    }
}

 

콜라보 요청하는 사람으로부터 제목과 내용을 받아옵니다.

사실 음악 파일과 음악 종류(? 악기 등)을 받아와야하는데

Music Entity를 따로 설계를 해버려서 방법을 찾는 중입니다.(양방향 설계를 하면 되려나?)

 

@Service에서 Mapper를 사용해서 Entity로 변환해서 저장을 해줍니다.

 

나머지는 내일 계속.......

+ Recent posts