프로젝트/스프링 부트와 AWS로 혼자 구현하는 웹 서비스

전체 조회 화면 만들기

SeoburiFaust 2022. 9. 6. 14:30

index.mustache에 다음과 같이 목록 출력 영역을 추가

<!--목록 출력 영역-->
<table class="table table-horizontal table-bordered">
    <thead class="thead-strong">
    <tr>
        <th>게시글번호</th>
        <th>제목</th>
        <th>작성자</th>
        <th>최종수정일</th>
    </tr>
    </thead>
    <tbody id="tbody">
    {{#posts}}
        <tr>
            <td>{{id}}</td>
            <td><a href="/posts/update/{{id}}">{{title}}</a></td>
            <td>{{author}}</td>
            <td>{{modifiedDate}}</td>
        </tr>
    {{/posts}}
    </tbody>
</table>

 

{{#posts}}

 - posts라는 Lists를 순회한다.

- java의 for문과 동일하다고 생각하면 된다.

 

{{id}}등의 {{변수명}}

- List에서 뽑아낸 객체의 필드를 사용한다.

 

PostsRepository에 쿼리 추가

public interface PostsRepository extends JpaRepository<Posts, Long> {

    @Query("SELECT p FROM Posts p ORDER BY p.id DESC")
    List<Posts> findAllDesc();
}

SpringDataJpa에서 제공하지 않는 메소드는 위처럼 @Query를 사용해서 작성할 수 있다.

 

PostsService에 쿼리 추가

@Transactional
public List<PostsListResponseDto> findAllDesc() {
    return postsRepository.findAllDesc().stream()
            .map(PostsListResponseDto::new)
            .collect(Collectors.toList());
}

 

.map(PostsListResponseDto::new)

.map(posts -> new PostsListResponseDto(posts))와 같다고 한다.

 

PostsListResponseDto 생성

@Getter
public class PostsListResponseDto {
    private Long id;
    private String title;
    private String author;
    private LocalDateTime modifiedDate;

    public PostsListResponseDto(Posts entity) {
        this.id = entity.getId();
        this.title = entity.getTitle();
        this.author = entity.getAuthor();
        this.modifiedDate = entity.getModifiedDate();
    }
}

 

id, title, author, modifiedDate를 담는다.

 

Controller 추가

 

@GetMapping("/")
public String index(Model model) {
    model.addAttribute("posts", postsService.findAllDesc());
    return "index";
}

index.controller에 위 코드를 추가한다.

 

Model

-서버 템플릿 엔진에서 사용할 수 있는 객체를 저장할 수 있다.

- 여기서는 postsService.findAllDesc()로 가져온 결과를 posts로 index.mustache에 전달한다.