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에 전달한다.
'프로젝트 > 스프링 부트와 AWS로 혼자 구현하는 웹 서비스' 카테고리의 다른 글
구글 소셜로그인 구현 - 1 (0) | 2022.10.03 |
---|---|
수정, 삭제 화면 만들기 (0) | 2022.09.06 |
게시글 등록화면 만들기 (0) | 2022.09.05 |
머스테치로 화면 구성 (0) | 2022.09.05 |
테스트코드 작성 (0) | 2022.09.02 |