[Spring] 영화 리뷰 목록과 조회 처리
![[Spring] 영화 리뷰 목록과 조회 처리](/assets/img/web/spring/logo.png)
영화 리뷰의 목록과 조회를 처리해봅시다.
- 1. PageRequestDTO 추가
- 2. PageResultDTO 추가
- 3. MovieDTO - 평점, 리뷰 개수, 날짜 추가
- 4. MovieService - entitesToDTO() 작성
- 5. MovieServiceImpl - getList() 작성
- 6. MovieContoller - list() 작성
- 7. list.html 작성
- 8. list.html 결과
- 9. MovieServiceImpl - getMovie() 작성
- 10. MovieController - read() 작성
- 11. read.html 작성
- 12. read.html 결과
영화 리뷰의 등록처리를 완료한 후 먼저 목록 페이지를 제작합니다. 목록 페이지에는 영화의 제목과 이미지, 평균 평점을 출력하고자 합니다.
1. PageRequestDTO 추가
우선 화면에 목록과 페이지 처리를 위해 이전에 사용한 PageRequestDTO를 dto 패키지를 생성한 뒤 추가합니다.
2. PageResultDTO 추가
PageResultDTO 역시 dto 패키지에 추가합니다.
3. MovieDTO - 평점, 리뷰 개수, 날짜 추가
목록 화면 출력을 위한 getListPage()의 포맷에 맞게 MovieDTO를 수정합니다.
double 타입의 avg, int 타입의 reviewCnt, LocalDateTime의 regDate, modDate를 작성합니다.
4. MovieService - entitesToDTO() 작성
MovieService에는 JPA를 통해 나온 엔티티 객체를 DTO로 변환하는 entitesToDTO()를 작성합니다.
entitesToDTO()는 MovieImage 엔티티를 담는 List와 평점 평균, 리뷰 개수를 파라미터로 받아 MovieDTO로 컨버트합니다.
5. MovieServiceImpl - getList() 작성
컨트롤러가 호출할 때 사용할 getList()를 작성합니다. MovieService에 getList()를 먼저 선언한 뒤 Impl에 해당 메소드를 구현합니다.
mno를 기준으로 내림차순 정렬하는 pageable을 만든 뒤 MovieRepository에서 엔티티를 꺼내와 Page에 가져옵니다. 가져온 엔티티는 Object[]에 담기며 각 인덱스의 자료형은 getListPage()의 결과값과 같습니다.
6. MovieContoller - list() 작성
MovieController에 목록 화면을 가져올 list()를 작성합니다.
7. list.html 작성
이전 board 예제에서 사용한 list.html을 복사해 templates의 movie 폴더에 붙여넣습니다.
기존에 작성된 board의 경로를 movie에 맞게 변경합니다.
목록에 출력할 데이터는 Model에 담겨있습니다. 이를 활용해 영화의 정보를 출력하도록 <table> 태그 안의 내용을 작성합니다. th:each를 통해 페이지의 result.dtoList를 dto에 담아 가져온 뒤 영화의 정보를 테이블에 출력하게 합니다.
8. list.html 결과
브라우저에서 url에 ‘movie/list’를 입력하고 확인한 결과 사진을 포함한 영화의 정보가 정상적으로 보이는 것을 확인할 수 있습니다.
9. MovieServiceImpl - getMovie() 작성
이제 조회 페이지를 위한 getMovie()를 작성합니다.
getMovie() 역시 MovieService에 먼저 선언을 한 뒤 MovieServiceImpl에서 구현합니다.
getMovie()는 mno를 파라미터로 받아온 뒤 movieRepository의 getMovieWithAll()을 사용해 해당 영화의 정보를 result에 담습니다.
result는 Movie 객체, MoiveImage 객체, 평점, 리뷰 개수를 가지고 있습니다. result로 가져온 데이터를 하나씩 꺼내 변수에 담아준 뒤 해당 정보를 entitesToDTO()의 파라미터로 넘겨 DTO로 컨버트 후 반환하도록 작성합니다.
10. MovieController - read() 작성
목록페이지를 호출하기 위한 read()를 작성합니다.
GET 방식으로 ‘/movie/read?mno=xx’와 같은 URL을 처리하도록 합니다.
수정 페이지 역시 동일하게 사용하기 때문에 /modify 역시 매핑되도록 작성합니다.
11. read.html 작성
조회 화면인 read.html을 작성합니다.
dto에서 제목, 평균 평점, 이미지 목록을 꺼내 출력하도록 작성합니다.
12. read.html 결과
목록 페이지에서 mno를 클릭한 결과 정상적으로 조회 페이지가 출력되는 것을 확인할 수 있습니다.