목록 처리 작업 순서
- 화면에서 필요한 목록 데이터에 대한 DTO 생성
- DTO를 Pageable 타입으로 전환
- Page<Entity>를 화면에서 사용하기 쉬운 DTO의 리스트 등으로 변환
- 화면에 필요한 페이지 번호 처리
목록 처리를 위한 DTO
목록 처리를 위해서 PageRequestDTO와 PageResultDTO를 나누어 생성해준다.
PageRequestDTO는 목록 페이지를 요청할 때 사용하는 데이터를 재사용하기 쉽게 만드는 클래스이다.
예를 들어 '페이지 번호,페이지 내 목록의 개수,검색 조건'들이 많이 사용된다. 이런 파라미터들을 DTO로 선언하고 나중에 재사용하는 용도로 사용한다.
PageResultDTO는 JPA를 이용하는 Repository에서 페이지 처리 결과를 Page<Entity>타입으로 반환하기 때문에 서비스 계층에서 이를 처리하기 위한 별도의 클래스이며 화면 출력에 필요한 페이지 정보들을 구성해 주는 클래스이다.
*JPA는 페이지 처리 결과를 Page<Entity>타입으로 반환한다*
즉,화면에서 전달되는 목록 관련된 데이터에 대한 DTO는 PageRequestDTO, 화면에서 필요한 결과는 PageResultDTO
PageRequestDTO 클래스
- 화면에서 전달되는 page 파라미터와 size 파라미터를 수집한다.
- 페이지 번호 등은 기본값을 가지는 것이 좋기 때문에 1과 10의 값을 이용한다.
- 해당 클래스에서 가장 중요한 목적인 Pageable타입의 객체를 생성한다.
- JPA를 이용하는 경우 페이지 번호가 0부터 시작한다는 점을 감안하여 1페이지의 경우 0이 될 수 있도록 page-1을 하는 형태로 작성한다.
PageResultDTO
- 다양한 곳에서 사용할 수 있도록 제네릭 타입을 이용하여 DTO와 EN이라는 타입 지정(DTO와 Entity 타입을 의미)
- Page<Entity> 타입을 이용해서 생성할 수 있도록 생성자로 작성
- Function<EN, DTO>는 엔티티 객체들을 DTO로 변환해 주는 기능
위와 같은 구조로 작성하면 나중에 어떤 종류의 Page<E> 타입이 생성되더라도 PageResultDTO를 이용해서 처리 가능
서비스 계층에서 목록 처리
서비스 계층에서 PageRequestDTO를 파라미터로, PageResultDTO를 리턴 타입으로 사용하는 getList()를 설계하고, 엔티티 객체를 DTO 객체로 변환하는 entityTODto()를 정의한다.
ServiceImpl 클래스에서는 추가된 getList()를 구현한다.
JPA의 처리결과인 Page<Entity>와 Function을 전달해서 엔티티 객체들을 DTO의 리스트로 변환하고, 화면에 페이지 처리와 필요한 값들을 생성한다.
'코드로 배우는 스프링부트 웹 프로젝트' 카테고리의 다른 글
Springboot) 방명록의 조회,수정,삭제 처리 (0) | 2021.12.09 |
---|---|
Springboot) GET & POST 방식의 차이점 / 등록 페이지와 등록 처리 (1) | 2021.12.09 |
Springboot) 서비스 계층과 DTO (0) | 2021.12.02 |
Springboot) 동적 쿼리 처리를 위한 Querydsl 설정과 사용 (0) | 2021.12.02 |
Springboot) 자동으로 처리되는 날짜/시간 설정 , JPA객체의 범위 (0) | 2021.12.02 |