BoardController에 findAll 메서드를 추가한다.
Get 요청이 / 경로로 즉, http://localhost:8092/board/ 로 들어오면 실행되는 메서드이다.
게시글의 목록을 조회하고 해당 정보를 'list.html' 템플릿에 전달한다.
[ BoardController ]
@GetMapping("/")
public String findAll(Model model) {
// DB에서 전체 게시글 데이터를 가져와서 list.html에 보여준다.
List<BoardDTO> boardDTOList = boardService.findAll();
model.addAttribute("boardList", boardDTOList);
return "list";
}
model.addAttribute은 조회한 게시글 목록을 Model에 "boardList"라는 이름으로 추가한다.
이렇게 추가된 데이터는 뷰에서 사용할 수 있다.
BoardService 파일에도 findAll 메서드를 추가한다.
[ BoardService ]
public List<BoardDTO> findAll() {
List<BoardEntity> boardEntityList = boardRepository.findAll();
List<BoardDTO> boardDTOList = new ArrayList<>();
for (BoardEntity boardEntity: boardEntityList) {
boardDTOList.add(BoardDTO.toBoardDTO(boardEntity));
}
return boardDTOList;
}
List<BoardEntity> boardEntityList = boardRepository.findAll();
boardRepository를 통해 데이터베이스에서 모든 게시글을 조회한다.
findAll 메서드는 JpaRepository에서 제공하는 메서드로, 해당 엔티티에 대한 모든 레코드를 가져온다.
List<BoardDTO> boardDTOList = new ArrayList<>();
조회한 게시글을 담을 BoardDTO 객체의 리스트를 생성한다.
for (BoardEntity boardEntity: boardEntityList) {
조회한 게시글 엔티티들을 순회하면서 각각에 대한 BoardDTO 객체를 생성하고 리스트에 추가한다.
boardDTOList.add(BoardDTO.toBoardDTO(boardEntity));
BoardDTO.toBoardDTO 메서드를 사용하여 BoardEntity를 BoardDTO로 변환한 후 리스트에 추가한다.
엔티티 객체를 화면에 표시할 DTO로 변환하는 과정이다.
return boardDTOList;
최종적으로 조회한 모든 게시글에 대한 정보가 담긴 BoardDTO 리스트를 반환한다.
BoardDTO 클래스에 toBoardDTO 메서드를 추가한다.
이 메서드는 BoardEntity 엔티티를 BoardDTO 데이터 전송 객체로 변환하는 역할을 한다.
[ BoardDTO ]
public static BoardDTO toBoardDTO(BoardEntity boardEntity) {
BoardDTO boardDTO = new BoardDTO();
boardDTO.setId(boardEntity.getId());
boardDTO.setBoardWriter(boardEntity.getBoardWriter());
boardDTO.setBoardPass(boardEntity.getBoardPass());
boardDTO.setBoardTitle(boardEntity.getBoardTitle());
boardDTO.setBoardContents(boardEntity.getBoardContents());
boardDTO.setBoardHits(boardEntity.getBoardHits());
boardDTO.setBoardCreatedTime(boardEntity.getCreatedTime());
boardDTO.setBoardUpdatedTime(boardEntity.getUpdatedTime());
return boardDTO;
}
엔티티의 데이터가 모두 DTO로 복사되면, 최종적으로 변환된 BoardDTO 객체를 반환한다.
templates 패키지에 list.html 파일을 생성한다.
[ list.html ]
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>list</title>
</head>
<body>
<table>
<tr>
<th>id</th>
<th>title</th>
<th>title(||쓰지 않은 경우)</th>
<th>writer</th>
<th>date</th>
<th>hits</th>
</tr>
<tr th:each="board: ${boardList}">
<td th:text="${board.id}"></td>
<td><a th:href="@{|/board/${board.id}|}" th:text="${board.boardTitle}"></a></td>
<td><a th:href="@{/board/${board.id}}" th:text="${board.boardTitle}"></a></td>
<td th:text="${board.boardWriter}"></td>
<td th:text="*{#temporals.format(board.boardCreatedTime, 'yyyy-MM-dd HH:mm:ss')}"></td>
<td th:text="${board.boardHits}"></td>
</tr>
</table>
</body>
</html>
<tr th:each="board: ${boardList}">
th:each 속성은 반복문을 나타낸다.
${boardList}에 있는 각 board에 대해 반복된다.
<a th:href="@{|/board/${board.id}|}" th:text="${board.boardTitle}"></a>
링크의 URL은 '/board/${board.id}가 된다.
<a th:href="@{/board/${board.id}}" th:text="${board.boardTitle}"></a>
| | 를 사용하지 않을 경우 링크의 URL은 '/board/$%7Bboard.id%7D' 처럼 된다.
실행해보자!!!
짠
리스트가 잘 출력되었다.
아직 저 링크를 누르면 에러 페이지가 나온다.
'Spring Boot' 카테고리의 다른 글
[게시판 만들기 (6)] 게시글 수정 (0) | 2024.01.14 |
---|---|
[게시판 만들기 (5)] 게시글 조회 (0) | 2024.01.14 |
[게시판 만들기 (3)] 게시글 작성_게시글 작성 완료 (0) | 2024.01.13 |
[게시판 만들기 (2)] 게시글 작성_작성 페이지 이동하기 (0) | 2024.01.12 |
[게시판 만들기 (1)] SpringBoot + jpa + mysql 개발 환경 설정 (0) | 2024.01.12 |