1. 전체 게시글 목록

@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
- given data인 integer userId = 1

- given data인 integer userId = null인 경우

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. 비공개 표시


Share article