시작이 반

[JPA] List<DTO> to List<Entity> (DTO, Entity) 본문

Programming/JPA

[JPA] List<DTO> to List<Entity> (DTO, Entity)

G_Gi 2021. 2. 1. 18:54
SMALL

API로 Json을 받아와서 DTO에 저장시켰다.

 

DTO에는 List<Item> item필드가 있고

 

이것을 Jparepository의 saveAll을 사용하여 DB에 저장시키기 위해 List<Entity>로 바꾸는 작업이 필요했다.

 

DTO

@Data
public class BooksResponseDto {
    private List<Item> item;
}
@Data
public class Item {
    private Long itemId; //책 id?
    private String isbn; //책 고유번호
    private String title; //책 제목
    private String author; //책 저자
    private String description; //책 설명
    private String pubDate; //출간일
    private String coverSmallUrl; //표지 작은사진
    private String coverLargeUrl; //표지
    private String categoryName; //카테고리
    private String categoryId; //카테고리 세부
    private int rank; //책 랭킹

}

 

Entity

public class Book {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "item_id")
    private Long itemId; //책 id?

    private String isbn; //책 고유번호

    private String title; //책 제목

    private String author; //책 저자

    private String description; //책 설명

    private String pubDate; //출간일

    @Column(name = "cover_small_url")
    private String coverSmallUrl; //표지 작은사진

    @Column(name = "cover_large_url")
    private String coverLargeUrl; //표지

    @Column(name = "category_name")
    private String categoryName; //카테고리

    @Column(name = "category_id")
    private String categoryId; //카테고리 세부

    @Column(name="ranking")
    private int rank; //책 랭킹
}

 

만약 save함수를 써서 insert를 한다면 Entity하나를 저장시키는 거라 Book개체를 만들어주면 된다.

이 작업은 쉬웠다.

@Data
public class Item {
    private Long itemId; //책 id?
    private String isbn; //책 고유번호
    private String title; //책 제목
    private String author; //책 저자
    private String description; //책 설명
    private String pubDate; //출간일
    private String coverSmallUrl; //표지 작은사진
    private String coverLargeUrl; //표지
    private String categoryName; //카테고리
    private String categoryId; //카테고리 세부
    private int rank; //책 랭킹

    public Book toEntity() {
        return new Book(itemId, isbn, title, author, description, pubDate, coverSmallUrl, coverLargeUrl, categoryName, categoryId, rank);
    }

}

 

하지만 List 를 어떻게 List로 맵핑 시키는지 ....??

 

stream함수를 사용하여 해결

tmdrl5779.tistory.com/37?category=836968

 

[Java] Stream

Spring공부중 자바 문법을 몰라서 일단 정리한다... 필요한 것만 우선 정리.. Stream 생성 컬렉션 배열 가변 매개변수 지정된 범위의 연속된 정수 특정 타입의 난수들 람다 표현식 파일 빈스트림 Colle

tmdrl5779.tistory.com

@Data
public class BooksResponseDto {
    private List<Item> item;

    public List<Book> ListDtoToListEntity(List<Item> item){
        return item.stream()
                .map(Item::toEntity)
                .collect(Collectors.toList());
    }

}

item.stream()

 

.map(Item::toEntity) - 스트림 변환

<R> Stream<R> map(Functoin<? super T, ? extends R> mapper) 해당 스트림의 요소들을 주어진 함수에 인수로 전달하여, 그 반환값으로 이루어진 새로운 스트림을 반환함.

Item클래스의 toEntity함수를 사용하여 요소들을 전달하여 Entity로 바꿈 새로운 스트림 반환

 

 

.collect(Collectors.toList()); - 요소 수집

<R,A> R collect(Collector<? super T,A,R> collector) 인수로 전달되는 Collectors 객체에 구현된 방법대로 스트림의 요소를 수집함.

반환된 스트림을 List로 변환

 

 

LIST

'Programming > JPA' 카테고리의 다른 글

[JPA] 변경감지와 병합(merge)  (1) 2021.05.27
[JPA] DTO, Domain(Entity)  (0) 2021.02.19
[JPA] 연관관계  (0) 2021.02.18
[JPA] Paging  (0) 2021.02.05
[JPA] JpaRepository  (0) 2021.01.31