글쓰기를 했으니 작성된 글을 목록에 불러오는 조회 기능을 만들어 보자.
1. 전체 조회 기능 만들기
1-1. BoardRepository에 findAll() 기능을 만들어 준다.
public List<Board> findAll() {
//여기 두 번째 전달자에 들어갈 수 있는 클래스는 @Entity가 붙어서 관리되는 클래스를 넣어서 맵핑한다.
Query query = em.createNativeQuery("select * from board_tb order by id desc", Board.class);
//getSingleResult()는 primary key로 1건의 데이터를 검색할 때 사용하고
//이렇게 복수의 검색 결과가 필요할 때는 getResultList()를 사용한다.
List<Board> boardList = query.getResultList();
return boardList;
}
1-2. 기능 만든 뒤 테스트 진행
@Test
public void findAll_test() {
// given
// when
boardRepository.save("제목1", "내용1");
boardRepository.save("제목2", "내용2");
List<Board> boardList = boardRepository.findAll();
// eye
for (Board b : boardList) {
System.out.println(b);
}
}
다음 챕터인 //given //when //then 으로 하는 JUNIT 테스트 이후에는 //then을 사용할 것이다.
테스트 돌려 보면 모든 게시글 조회하는 기능이 잘 작동한다.

2. 컨트롤러 설정
2-1. 컨트롤러에서 request객체의 속성을 통해 view에 정보 전달
@GetMapping("/board")
public String list(HttpServletRequest request) {
List<Board> boardList = boardRepository.findAll();
request.setAttribute("models", boardList);
return "board/list";
}
request에 속성 이름 “models”에 게시글 리스트를 정보를 저장한다
3. view 설정
3-1. mustache 설정
mustache는 기본적으로 requset와 session의 속성에 접근하지 못하므로
application.properties 설정 추가해준다.
spring.mustache.servlet.expose-request-attributes=true
spring.mustache.servlet.expose-session-attributes=true
3-2. mustache 문법
{{#A}} {{/A}}
List<Board> list를 request 속성에 "models"로 전달하면 mustache에서
{{#models}} 와 {{/models}} 이 사이에 태그를 넣으면 for-each반복문으로 돌아간다.
{{#A}} {{/A}}
내부에서의 변수명 list를 전달해서 하나씩 반복하기 때문에 객체를 담은 속성이름은 필요 없다.
그냥 객체의 필드명을 {{title}}, {{content}} 이러면 해당 객체의 필드값을 출력하면서 반복
{{속성이름}}
만약 객체값이 아니라면 그냥 {{속성이름}} 적으면 바로 해당 값이 꺼내진다
{{속성이름.필드이름}}
객체 데이터를 담은 속성의 속성이름.필드이름을 {{ }}로 감싸면 바로 해당 속성에 담긴
객체의 멤버 변수 값을 꺼낸다.
request 속성 "board"에 Board 객체를 전달했다고 하면 id와 content를 꺼낼 때
{{board.id}} 와 {{board.content}} 로 꺼낸다.
3-3. view 설정
Controller에서 models에 넣어줬으니 {{#models}} {{/models}}를 사용하고 그 사이에 반복을 돌릴 태그를 넣어 줬다.

4. 게시글 조회
게시글을 추가했더니 리스트를 잘 가지고 온다.

Share article