반응형
조회 페이지 구성
- 영화 조회
- 영화 리뷰 등록 / 수정 / 삭제
진행 순서
- MovieService에서 영화 번호를 이용해 MovieDTO를 반환하는 getMovie() 정의
- MovieServiceImpl에서 getMovie()를 구현
- MovieController의 목록 페이지에서 영화의 번호를 이용한 URL 처리 [조회와 수정에서 사용]
: '/movie/read?mno=103&page=1'
1. MovieService에서 getMovie() 정의
//특정 영화 번호를 이용해 영화 정보 전달 메서드
MovieDTO getMovie(Long mno);
MovieServiceImpl에서 getMovie()를 구현하기 위해서는
: MovieDTO를 반환하기 위해 MovieRepository에서 받은 데이터를 가공해야한다
MovieRepository에서 받는 List<Object>의 구조
entitiesToDTO(Movie movie, List<MovieImage> imgList, Double avg, Long reviewCnt)
2. 리포지토리에서 데이터를 받아서 가공하는 MovieServiceImpl의 getMovie() 메서드 구현
//리포지토리에서 데이터를 받아서 가공해 MovieDTO를 반환하는 메서드를 구현
@Override
public MovieDTO getMovie(Long mno){
List<Object[]> result = movieRepository.getMovieWithAll(mno);
//영화 이미지를 제외하고 모든 row가 동일한 값을 가지고 있다.
Movie movie = (Movie) result.get(0)[0]; //맨 앞에 존재하는 Movie 엔티티
List<MovieImage> movieImageList = new ArrayList<>(); //영화 이미지 개수만큼 객체 필요
result.forEach(arr ->{
MovieImage movieImage=(MovieImage) arr[1];
movieImageList.add(movieImage);
});
Double avg= (Double) result.get(0)[2]; //평균 평점
Long reviewCnt = (Long) result.get(0)[3]; //리뷰 개수
return entitiesToDTO(movie,movieImageList,avg,reviewCnt);
}
3. MovieController의 목록 페이지에서 영화의 번호를 이용한 URL 처리 [조회와 수정에서 사용]
//조회와 수정에서 사용하는 URL 처리
@GetMapping({"/read", "/modify"})
public void read(long mno, @ModelAttribute("requestDTO") PageRequestDTO requestDTO, Model model){
log.info("mno :"+ mno);
MovieDTO movieDTO = movieService.getMovie(mno);
model.addAttribute("dto", movieDTO);
}
4. 조회 화면 구현
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<th:block th:replace="~{/layout/basic :: setContent(~{this::content} )}">
<th:block th:fragment="content">
<h1 class="mt-4">Movie Read Page</h1>
<div class="form-group">
<label >Title</label>
<input type="text" class="form-control" name="title" th:value="${dto.title}" readonly>
</div>
<div class="form-group">
<label >Review Count </label>
<input type="text" class="form-control" name="title" th:value="${dto.reviewCnt}" readonly>
</div>
<div class="form-group">
<label >Avg </label>
<input type="text" class="form-control" name="title" th:value="${dto.avg}" readonly>
</div>
<style>
.uploadResult {
width: 100%;
background-color: gray;
margin-top: 10px;
}
.uploadResult ul {
display: flex;
flex-flow: row;
justify-content: center;
align-items: center;
vertical-align: top;
overflow: auto;
}
.uploadResult ul li {
list-style: none;
padding: 10px;
margin-left: 2em;
}
.uploadResult ul li img {
width: 100px;
}
</style>
<div class="uploadResult">
<ul >
<li th:each="movieImage: ${dto.imageDTOList}" th:data-file="${movieImage.getThumbnailURL()}">
<img th:if="${movieImage.path != null}" th:src="|/display?fileName=${movieImage.getThumbnailURL()}|">
</li>
</ul>
</div>
<script>
$(document).ready(function(e) {
});
</script>
</th:block>
</th:block>
반응형
'Server Programming > Spring Boot Backend Programming' 카테고리의 다른 글
[Spring 부트 - 영화 리뷰 프로젝트] 6. Ajax로 영화 리뷰 처리 (2) 리뷰 등록 / 수정 /삭제 (0) | 2022.10.18 |
---|---|
[Spring 부트 - 영화 리뷰 프로젝트] 6. Ajax로 영화 리뷰 처리 (1) 리뷰 구성 (0) | 2022.10.18 |
[Spring 부트 - 영화 리뷰 프로젝트] 4. 영화 목록 처리 (0) | 2022.10.18 |
[Spring 부트 - 영화 리뷰 프로젝트] 3. 영화 등록 처리 (0) | 2022.10.18 |
[Spring 부트 - 영화 리뷰 프로젝트] 2. 파일 업로드 처리 (2) 섬네일 이미지를 통한 화면 처리와 파일 삭제 (0) | 2022.10.18 |