Search
📙

#블로그만들기_08 #게시글 목록보기

Board의 컬렉션을 조회, 프론트 확인먼저!!

배열로 담아서 배열의 갯수 만큼, 아래 화면처럼 나열할 것이다. 제일 최근글이 제일 위로 오도록 해야된다. Mustache 반복문 문법이 있으면 편하다.
{{#boardList}}{{/boardList}} 사이의 부분은 boardList라는 배열 또는 리스트를 반복 처리하기 위한 것이다. 각 반복에서 boardList의 현재 항목에 대한 데이터를 사용하여 HTML을 한다. 여기서 {{title}}{{id}}는 Mustache 템플릿에서 현재 항목의 titleid 속성을 참조하는 방법이다.
index.mustache 문서 전체 코드, 프론트에 사용된다.
{{> layout/header}} <h1> {{#sessionUser}} {{username}} {{/sessionUser}} </h1> <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}}
HTML
복사

게시물 전체를 조회하는 DB 연동

쿼리문이 잘 작동하는지 먼저 확인

H2콘솔 로그인 쿼리문이 잘 작동하는지 먼저 확인 잘 작동한다.
// 콘솔 주소 http://localhost:8080/h2-console/ // 전체 조회 쿼리문 select * from board_tb order by id desc
Java
복사

findAll() 메소드 구현

EntityManager의 의존성 주입을 사용하여 조회된 객체를 Board.class로 담으면 JPA가 알아서 문법에 맞게 entity로 담아준다. query.getResultList() 는 현재 기대하는 결과가 여러 개 이기떄문에 조회된 결과를 배열로 담아주는 코드 사용.
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 // bean객체 등록 public class BoardRepository { private final EntityManager em; // final선언 되어야 의존성 주입 완성 private final BoardRepository boardRepository; public List<Board> findAll(){ // 조회된 데이터를 담을 컬렉션 객체 Board타입을 받는다. Query query = em.createNativeQuery("select * from board_tb order by id desc", Board.class); return query.getResultList(); // getResultList는 조회된 여러결과값을 배열로 담는다. } }
SQL
복사
쿼리에 잘 담기는지 테스트 확인 → foreach문 구현후 URL로 접속하면 된다.
@GetMapping({ "/", "/board" }) public String index(HttpServletRequest request) { List<Board> boardList = boardRepository.findAll(); // 테스트용 코드 forEach문 for (Board a : boardList){ System.out.println(a); } request.setAttribute("boardList", boardList); return "index"; }
Java
복사
URL접속 주소 넣고 콘솔창을 확인해보자.
// 아래 URL을 주소창에 넣고 엔터 http://localhost:8080/
Java
복사
확인완료!
화면을 봤을 때 필요한 정보가 아스트리크로 받으면 죽방 맞는다. 순서를 볼 수 없으니까 . 조회한 테이블이랑 동일한 엔티티를 만들어서 담고, DTO로 옮겨서 정제하는 것이 기본기 ORM이 뭐지? DB에서 엔티티만들고 엔티티에서 DTO만드는 연습을 해야 신입으로서 빛을 발한다.