게시판 만들기(스프링 부트3, 나도코딩 스터디)/5장. 게시글 읽기 : Read

5.1~5.2 단일 데이터 조회하기(게시판 만들기 / 길벗 코딩 자율학습단)

coding232624 2023. 11. 24. 12:09

데이터 조회 과정

  1. 사용자가 데이터를 조회해달라고 웹 페이지에서 URL 요청을 보냄
  2. 서버의 컨트롤러가 요청을 받아 해당 URL에서 찾으려는 데이터 정보를 리파지터리에 전달
  3. 리파지터리는 정보를 가지고 DB에 데이터 조회를 요청
  4. DB는 해당 대이테를 찾아 이를 엔티티로 변환
  5. 반환된 엔티티는 모델을 통해 뷰 템플릿으로 전달
  6. 최종적으로 결과 뷰 페이지가 완성되어 사용자의 화면에 출력

단일 데이터 조회하기(실제 과정)

  1. URL 요청하기 (/articles/id 로 요청)
  2. 컨트롤러는 @GetMapping("/articles/{id})로 URL받기
  3. URL의 id가 포함된 메서드 생성
  4. 메서드로 URL의 id를 매개변수로 받기 위해 매개변수 앞에 @PathVariable 어노테이션 붙이기
  5. 리파지터리에서 DB에 저장된 데이터를 조회하기 위해 리파지터리.fidById()사용
  6. 조회된 데이터가 없을 경우를 대비해 .orElse() 메서드로 데이터가 없을 경우 null반환하도록 함
  7. id로 DB에서 조회한 데이터를 모델에 저장(article이란 이름으로 저장하였음)
  8. 뷰페이지(mustache)로 이동하여 뷰 페이지 설정
  9. 데이터를 사용하는 영역에 {{#모델저장이름}}{{/모델저장이름}} 을 씌워줌

controller 코드

@GetMapping("/articles/{id}")
public String show(@PathVariable Long id, Model model) {
    log.info("id = " + id);
    Article articleEntity = articleRepository.findById(id).orElse(null);
    model.addAttribute("article",articleEntity);
    return "articles/show";
}

mustache 코드

{{>layouts/header}}
<table class="table">
  <thead>
    <tr>
      <th scope="col">id</th>
      <th scope="col">title</th>
      <th scope="col">content</th>
    </tr>
  </thead>
  <tbody>

    {{#article}}
    <tr>
      <th>{{id}}</th>
      <td>{{title}}</td>
      <td>{{content}}</td>
    </tr>
    {{/article}}
  </tbody>
</table>

{{>layouts/footer}}