[Spring Boot] 37. 스프링부트 블로그 v2 (JPA) (7) 게시글 목록 2

김주희's avatar
Apr 06, 2025
[Spring Boot] 37. 스프링부트 블로그 v2 (JPA) (7) 게시글 목록 2

1. 전체 게시글 목록

notion image
@GetMapping("/") public String list(HttpServletRequest request) { request.setAttribute("models", boardService.글목록보기()); return "board/list"; }
public List<Board> findAll() { Query query = em.createQuery("select b from Board b order by b.id desc", Board.class); return query.getResultList(); }
public List<Board> 글목록보기() { return boardRepository.findAll(); }
 

2. 공개글 + 내가 쓴 글만 조회되는 게시글 목록

public List<Board> findAll(Integer userId) { // JPQL은 keyword binding된다. // user는 객체이므로 b.user.id로 조회해야한다. // userId가 null일때도 userId를 조회하면 느려진다. (or 조건에 의해 isPublic이 true인 것들 찾고 다시 userId가 일치하는 것 찾으므로) // 따라서 동적 쿼리가 낫다! => 오버로딩으로 해결할 수도 있다. String s1 = "select b from Board b where b.isPublic = true or b.user.id = :userId order by b.id desc"; String s2 = "select b from Board b where b.isPublic = true order by b.id desc"; Query query = null; if (userId == null) { query = em.createQuery(s2, Board.class); } else { query = em.createQuery(s1, Board.class); query.setParameter("userId", userId); } return query.getResultList(); }
public List<Board> 글목록보기(Integer userId) { // 매개변수에 User sessionUser처럼 필요하지 않은 것들을 전부 포함해서 호출하지 말자! return boardRepository.findAll(userId); }
@GetMapping("/") public String list(HttpServletRequest request) { // 세션이 있을 수도 있고 없을 수도 있고 (User / null) User sessionUser = (User) session.getAttribute("sessionUser"); if (sessionUser == null) { request.setAttribute("models", boardService.글목록보기(null)); } else { request.setAttribute("models", boardService.글목록보기(sessionUser.getId())); } return "board/list"; }
 
 

1. test

  1. given data인 integer userId = 1
notion image
 
 
  1. given data인 integer userId = null인 경우
notion image
public void findAll_test() { // given -> 함수의 매개변수(e.g. findById에서는 id) Integer userId = null; // when -> 테스트할 함수 호출 -> 쿼리 확인 List<Board> boardList = boardRepository.findAll(userId); // eye for (Board board : boardList) { System.out.print(board.getId() + ", " + board.getTitle()); System.out.println(); } }
 
 

3. 비공개 표시

notion image
notion image
Share article

jay0628