데이터 조회 과정

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

단일 데이터 조회하기

1. URL 요청받기

public class ArticleController {
    @Autowired
    private ArticleRepository articleRepository;

    @GetMapping("/articles/{id}") // 데이터 조회 요청 접수
    public String show(@PathVariable Long id) { // 매개변수로 id 받아오기
				log.info("id = " + id); // id를 잘 받았는지 확인하는 로그 찍기
        return "";
    }

2. 데이터 조회하여 출력하기

 @GetMapping("/articles/{id}") // 데이터 조회 요청 접수
    public String show(@PathVariable Long id, Model model) { // 매개변수로 id 받아오기
        log.info("id = " + id); // id를 잘 받았는지 확인하는 로그 찍기

        // 1. id를 조회하여 데이터 가져오기
        Article articleEntity = articleRepository.findById(id).orElse(null);

        // 2. 모델에 데이터 등록하기
        model.addAttribute("article", articleEntity);

        // 3. 뷰 페이지 반환하기
        return "articles/show";
    }
{{>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}}
@AllArgsConstructor
@NoArgsConstructor // 기본 생성자 추가 어노테이션
@ToString

3. 실습 정리

  1. 사용자가 입력한 데이터를 조회하려면 먼저 URL을 요청해야 한다. 실습에서는 /articles/id 형식으로 URL을 요청했다.

  2. 컨트롤러는 @GetMapping(”/articles/{id}")로 URL을 요청한다. 이 URL에 포함된 id를 show() 메소드의 매개변수로 받는데, 이때 매개변수 앞에 @PathVariable 어노테이션을 붙여야 URL의 id를 가져올 수 있다.

    @GetMapping(”/articles/{id}")
    public String show(6PathVariable Long id, Model model {
    }
    
  3. 리포지토리에서 DB에 저장된 데이터를 id로 조회할 때 findById() 메소드를 사용한다. 특별히 조회된 데이터가 없는 경우도 처리해야 하므로, orElse() 메소드로 null을 반환한다.

    Article articleEntity = articleRepository.findByld(id).orElse(null);
    
  4. id로 DB에서 조회한 데이터는 모델에 article이라는 이름으로 등록한다.

    model.addAttribute("article", articleEntity);