728x90
반응형

데이터 조회 과정

 

- 웹 페이지에 게시글을 등록 -> 서버를 통해 DB에 저장 

DB에 저장된 데이터를 웹 페이지에 출력해야 한다.

 

사용자가 데이터 조회해달라고 url로 요청한다. <form>

서버의 컨트롤러가 요청을 받고 찾으려는 데이터 정보를 리파지토리에 전달 

리파지터리는 정보를 가지고 DB에 데이터 조회 요청

DB가 찾아서 엔티티로 반환 

엔티티는 모델에서 뷰 템플릿으로 전달

뷰 페이지 클라이언트 화면에 출력

 

 

--- 단일 데이터 조회하기

url에서 요청을 받아야 한다

url 이 직접 id 정보를 서버에 보내서 id= 1인 데이터를 달라고 요청할 수 있음

 

articles/id 로 URL 요청할 때 응답할 수 있도록 구현하기

@GetMapping("/articles/{id}") 로 id를 변수로 사용한다.

 

URL요청을 받아서 수행할 show() 메서드 만들기 

메서드의 매개변수는 URL에 있는 id를 가져와야 하는데, @PathVariable 어노테이션을 붙인다.

@PathVariable은 URL에 있는 전달값을 컨트롤러의 매개변수로 가져오는 어노테이션이다.

 

이제 show(id) 는 

1. id 를 조회해서 DB에 id번째 데이터를 가져와야 한다.

2. 가져온 데이터를 모델에 등록하고

3. 조회한 데이터를 사용자에게 보여주기 위한 뷰 페이지를 만들고 반환해줘야 한다.

 

-1-

리파지토리는 스프링부트가 자동으로 @Autowired 로 객체를 만들어 놨었다. 

이 리파지토리에 id를 가지고 find를 한다. - findById(Long id) : JPA의 CrudRepository가 제공하는 메서드

특정 엔티티의 id값을 기준으로 데이터를 찾아서 Optional 타입으로 반환

Article articleEntity 에 Optional 타입으로 가져온다

 

Optinal<Article> 로 받거나 끝에 orElse(null) 추가해서 해결

 

-2-

모델에 데이터를 등록

articleEntity에 담긴 데이터를 모델에 등록해야 한다. 모델에 등록해놔야 그 모델을 뷰 페이지에서 사용할 수 있기 때ㅜㅁㄴ

model.addAttributte(String name, Object Value)

name : 모델에 등록할 객체의 이름

Value : 객체

 

-3-

뷰페이지 show.mustache 제작

부트스트랩 사용

 

아까 article이라는 이름으로 articleEntity 등록했음

모델에 등록한 article은 뷰 페이지에서 mustache 문법 이용해서 출력한다.

 

이때 {{#article}}{{/article}} 로 가져와서 사용한다.

 

이렇게 만들어놔도 데이터 입력 하고 바로 볼 수 가 없다.

 

No default Constructor for entity : Article 엔티티에 기본 생성자 가 없다

? 아까 AllArgsConstructor은 뭐지

 

- 기본 생성자는 생성자인데 매개변수가 아무것도 없는 생성자임

롬복으로 @NoArgsConstructor 이용해서 기본 생성자를 자동으로 추가할 수 있다.

 

 

--- 데이터 목록 조회하기

 

이제 단일 데이터가 아닌 여러개의 데이터, 데이터 목록을 조회할 수 있다.

방금까지 단일 데이터를 조회할 때랑 다르게, 엔티티 여러개를 리스트로 반환해야 한다.

 

public String index() 메서드를 구현하자

 

1. 일단 DB에서 모든 article들을 가져와서

2. article 묶음을 모델로 묶고

3. 그 모델을 이용해서 뷰 페이지를 만들어야 한다.

 

1. DB에서 데이터를 가져오려면 리파지토리가 필요하다. articleRepository 에서 findAll() 메서드를 이용, 모든 DB 데이터를 가져온다.

List<Article> articleEntityList = articleRepository.findAll();

 

findAll()은 iterable 데이터 타입을 반환하지만 작성 타입이 List라 에러 발생한다.

다운 캐스팅을 하거나 업 캐스팅으로 문제를 해결할 수 있다.

또는 findAll()이 ArrayList 타입을 반환하도록 오버라이드 하면 된다.

 

2. 모델에 데이터 등록하기

뷰 페이지로 변환할 수 있는 모델에 이제 addAttribute를 이용해서 DB에서 가져온 데이터를  넣어준다.

 

"articleList" 라는 이름으로 모델에 방금 가져온 articleEntityList를 넣어준다.

 

 

3. 뷰페이지를 index.mustache로 구현한다.

이때 내용 부분이 모델 속 리스트를 순회하면서 모두 출력할 수 있어야 한다.

 

mustache 속 {{#articlesList}} ~ {{/articleList}} 안에 반복되는 리스트를 넣는다.

 

 

 

 

반응형

+ Recent posts