logoStephen's 기술블로그

포스트 검색

제목, 태그로 포스트를 검색해보세요

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

#블로그만들기_08 #게시글 목록보기
SpringWebApp
성훈 김
2024년 2월 6일
목차

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

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

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

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

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

🔹 findAll() 메소드 구현

💡
🔹 EntityManager의 의존성 주입을 사용하여 조회된 객체를 Board.class로 담으면 JPA가 알아서 문법에 맞게 entity로 담아준다. 🔹 query.getResultList() 는 현재 기대하는 결과가 여러 개 이기떄문에 조회된 결과를 배열로 담아주는 코드 사용.
SQL
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는 조회된 여러결과값을 배열로 담는다.
    }
}
💡
쿼리에 잘 담기는지 테스트 확인 → foreach문 구현후 URL로 접속하면 된다.
Java
@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";
    }
 
 
💡
URL접속 주소 넣고 콘솔창을 확인해보자.
Java
// 아래 URL을 주소창에 넣고 엔터
http://localhost:8080/
notion image
 
 
💡
확인완료!
notion image
 
 
 

💡
🔹 화면을 봤을 때 필요한 정보가 🔹 아스트리크로 받으면 죽방 맞는다. 순서를 볼 수 없으니까 . 🔹 조회한 테이블이랑 동일한 엔티티를 만들어서 담고, DTO로 옮겨서 정제하는 것이 기본기 🔹 ORM이 뭐지? 🔹 DB에서 엔티티만들고 엔티티에서 DTO만드는 연습을 해야 신입으로서 빛을 발한다.