👉 Mission. DB속 데이터를 조회하여, 웹 페이지로 확인하시오
Client에서 데이터 요청
→ 요청 url을 Controller가 받음
→ 이 받아진 url에서 찾고자 하는 데이터의 정보를 Repository에게 전달
→ 이를 받은 Repository는 DB에 요청
→ DB는 해당 데이터를 찾아 이를 Entity로 반환
→ 반환된 Entity는 Model을 통해 View template으로 전달
→ 최종적으로, 결과 페이지가 완성되어 Client에게 보내짐
1. 데이터 조회 페이지 설정 (요청 url 받기)
파일명 : controller/ArticleController.java
@GetMapping("/articles/{id}")
public String show(@PathVariable Long id){
//1. id로 데이터 가져오기
//2. 가져온 데이터를 모델에 등록
//3. 보여줄 페이지를 설정!
return "";
}
@GetMapping("/articles/{id}")
에서 {id}
는 이 위치에 들어갈 수는 변수라는 의미!@PathVariable
: URL 경로에서 변수 값을 추출하여 매개변수에 할당, 경로 변수는 중괄호 {id}로 둘러싸인 값을 나타낸다[ 데이터 조회를 위한 코드 과정 ]
2. id로 데이터 가져오기
//1. id로 데이터 가져오기
Article articleEntity = articleRepository.findById(id).orElse(null);
🔴 여기서 잠깐,
orElse(null)
없이 코드를 작성하면 오류가 뜨는 이유!
- 에러 원인:
findById(id)
가Optional<Article>
을 반환하기 때문에 Article 변수에 할당할 수 없음.Optional 이란, Java 8부터 도입된 클래스로, 특정 값이 있을 수도 있고 없을 수도 있는 상황을 다루기 위해 사용된다.
즉, 이 상황에서findById
가 id에 해당하는 Article 데이터가 있을 수도 있고 없을 수도 있음으로 나타내는 것!
따라서 findById의 반환값을 Article 타입 변수에 할당하면, 값이 없을 때 Optional이 null로 처리될 수 있는 것을 무시하게 되어 타입 불일치 에러가 발생함.
- 해결 방법:
Optional<Article>
로 타입을 맞추거나, Optional에서 값을 꺼내어 Article 타입으로 사용하기 위해.orElse(null)
을 사용.
- Optional 사용: 값을 직접 다루기보다 명시적으로 값이 없는 경우를 처리하려는 경우 사용.
- orElse(null) 사용: Optional을 직접 사용하지 않고 null로 처리하려는 경우 사용.
3. 가져온 데이터 Model에 등록
//2. 가져온 데이터를 모델에 등록
model.addAttribute("article", articleEntity);
4. View 페이지 만들기 (Model에서 던진 Entity를 View페이지에서 사용하는 법)
//3. 보여줄 페이지를 설정!
return "articles/show";
파일명 : resources/templates/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}}
#
을 통해 가져올 수 있음{{#article}}
~ {{/article}}
이 사이 코드에서 article을 사용할 것이라는 의미<결과 화면>
[ 데이터 조회 후 페이지에 보여주는 방법 ]
강의 출처 : https://www.youtube.com/watch?v=_vDACE13Ubc&list=PLyebPLlVYXCiYdYaWRKgCqvnCFrLEANXt&index=1 [스프링 부트 입문 - 홍팍]