쿼리작성

public List<Board> findAll() {
    Query query = em.createQuery("select b from Board b order by b.id desc", Board.class);
    return query.getResultList();
}

테스트

@Test
public void findAll_test() {
    // given
    // when
    boardRepository.findAll();
    // then
}

컨트롤러

@GetMapping("/")
public String index(HttpServletRequest request) {
    List<Board> boardList = boardRepository.findAll();

    request.setAttribute("boardList", boardList);

    return "index";
}

머스테치

{{> layout/header}}

<div class="container p-5">
    {{#boardList}}
    <div class="card mb-3">
        <div class="card-body">
            <h4 class="card-title">{{title}}</h4>
            <div class="mb-3">{{createdAt}}</div>
            <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}}

레이지 일때는 쿼리가 한번만 발동하지만

이걸 일때는 쿼리가 더미데이터안에 있는 유저의 수만큼 나와야 하지만 세번만 나오는데 하나는

캐싱되서 하나가 안나옴

이걸 일 때는 쿼리가 원치않게 많이 나오니 레이지를 사용하는게 좋다.

게시글 목록보기 쿼리 작성 Lazy → (default_batch_Fetch_size)

스프링 JPA에서 default_batch_fetch_size 설정은 복잡한 조회쿼리 작성시,
지연로딩으로 발생해야 하는 쿼리를 IN절로 한번에 모아보내는 기능이다.