![[블로그 만들기] 15. 게시판 구현 : 목록보기](https://image.inblog.dev?url=https%3A%2F%2Finblog.ai%2Fapi%2Fog%3Ftitle%3D%255B%25EB%25B8%2594%25EB%25A1%259C%25EA%25B7%25B8%2520%25EB%25A7%258C%25EB%2593%25A4%25EA%25B8%25B0%255D%252015.%2520%25EA%25B2%258C%25EC%258B%259C%25ED%258C%2590%2520%25EA%25B5%25AC%25ED%2598%2584%2520%253A%2520%25EB%25AA%25A9%25EB%25A1%259D%25EB%25B3%25B4%25EA%25B8%25B0%26logoUrl%3Dhttps%253A%252F%252Finblog.ai%252Finblog_logo.png%26blogTitle%3DCoding_study&w=2048&q=75)
1. Index.mustache파일에 게시판 만들기
{{> layout/header}}
<div class="container p-5">
<div class="card mb-3">
<div class="card-body">
<h4 class="card-title mb-3">제목1</h4>
<a href="/board/1" class="btn btn-primary">상세보기</a>
</div>
</div>
<ul class="pagination d-flex justify-content-center">
<li class="page-item disabled"><a class="page-link" href="#">Previous</a></li>
<li class="page-item"><a class="page-link" href="#">Next</a></li>
</ul>
</div>
{{> layout/footer}}

2. BoardRepository 만들기
- IoC 컨테이너에 하나만 띄워서 관리하기
private final EntityManager em; // IoC 컨테이너에 띄우기
- findAll의 목적이 Board_tb의 데이터를 조회해서 화면에 뿌리는 것이고
데이터가 여러개니까 List<Board>로 받음
- 원래는 board가 아니라 id랑 title같이 필요한 정보만 받는게 맞음!
package shop.mtcoding.blog.board;
import jakarta.persistence.EntityManager;
import jakarta.persistence.Query;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Repository;
import java.util.List;
@RequiredArgsConstructor
@Repository
public class BoardRepository {
private final EntityManager em; // jpa가 제공해줌
// 조회니까 트랜잭션 필요없음
public List<Board> findAll() { // 보드 테이블의 모든 것 가지고 오기
Query query = em.createNativeQuery("select * from board_tb order by id desc", Board.class);
System.out.println("BoardRepository에 findAll 메서드 호출됨");
return query.getResultList(); // 여러건
} // 이 결과를 리퀘스트에 담고 뷰 화면 가서 뿌리기
}

3. BoardResponse에서 DetailDTO 가방 만들기
package shop.mtcoding.blog.board;
import lombok.Data;
public class BoardResponse {
@Data
public static class DetailDTO {
private int id;
private String title;
private String content;
private int userId;
private String username;
}
}
4. BoardController에서 index 주소 만들기
package shop.mtcoding.blog.board;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpSession;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import shop.mtcoding.blog.user.User;
import java.util.List;
@RequiredArgsConstructor
@Controller
public class BoardController {
// HttpSession 객체를 참조
private final HttpSession session;
private final BoardRepository boardRepository; // DI
@GetMapping({"/", "/board"})
public String index(HttpServletRequest request) {
User sessionUser = (User) session.getAttribute("sessionUser");
if (sessionUser == null) {
System.out.println("로그인 안된 상태입니다");
} else {
System.out.println("로그인 된 상태입니다");
}
List<Board> boardList = boardRepository.findAll();
request.setAttribute("boardList", boardList); // ("key", value)
return "index";
}
@GetMapping("/board/saveForm")
public String saveForm() {
return "board/saveForm";
}
@GetMapping("/board/1")
public String detail() {
return "board/detail";
}
}
3. index에 mustache 문법으로 반복문 만들기
- {{#}} {{/}} : if문
{{> layout/header}}
<div class="container p-5">
{{#boardList}}
<div class="card mb-3">
<div class="card-body">
<h4 class="card-title mb-3">제목1</h4>
<a href="/board/1" class="btn btn-primary">상세보기</a>
</div>
</div>
{{/boardList}}
<ul class="pagination d-flex justify-content-center">
<li class="page-item disabled"><a class="page-link" href="#">Previous</a></li>
<li class="page-item"><a class="page-link" href="#">Next</a></li>
</ul>
</div>
{{> layout/footer}}


4. Index에 자바 코드 변수 집어넣기
- {{}} : 변수 출력하기 / ‘title’과 ‘id’라는 변수
- 주소 뒤에 올 수 있는 것은 PK or Unique만 가능함

{{#boardList}}
<div class="card mb-3">
<div class="card-body">
<h4 class="card-title mb-3">{{title}}</h4>
<a href="/board/{{id}}" class="btn btn-primary">상세보기</a>
</div>
</div>
{{/boardList}}
{{> layout/header}}
<div class="container p-5">
{{#boardList}}
<div class="card mb-3">
<div class="card-body">
<h4 class="card-title mb-3">{{title}}</h4>
<a href="/board/{{id}}" class="btn btn-primary">상세보기</a>
</div>
</div>
{{/boardList}}
<ul class="pagination d-flex justify-content-center">
<li class="page-item disabled"><a class="page-link" href="#">Previous</a></li>
<li class="page-item"><a class="page-link" href="#">Next</a></li>
</ul>
</div>
{{> layout/footer}}

Share article