쿼리작성
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}}
레이지 일때는 쿼리가 한번만 발동하지만
이걸 일때는 쿼리가 더미데이터안에 있는 유저의 수만큼 나와야 하지만 세번만 나오는데 하나는
캐싱되서 하나가 안나옴
이걸 일 때는 쿼리가 원치않게 많이 나오니 레이지를 사용하는게 좋다.
스프링 JPA에서 default_batch_fetch_size 설정은 복잡한 조회쿼리 작성시,
지연로딩으로 발생해야 하는 쿼리를 IN절로 한번에 모아보내는 기능이다.