단일 데이터를 조회할 때는 Repository에서 Entity만을 반환한다면, 데이터 목록을 조회할 때는 Entity의 List를 반환한다.
일단 조회 요청이 URL로 들어왔을 때 처리할 수 있는 controller 코드를 기본적으로 작성한다.
현재는 완성된 코드이지만 요지는 @GetMapping("/articles")
를 선언해 URL 요청을 받고 index()코드가 작동되도록 한다.
DB에서 모든 데이터를 가져오기 위해서는 Repository에 있는 findAll() 메서드를 사용한다. 메서드를 수행한 결과는 (코드 상에서) articleEntityList라는 변수에 데이터의 묶음을 받아 오는 것이므로 List<Article>
로 설정한다. > DB에서 조회한 데이터 묶음을 리스트에 담긴 Article 타입으로 가져온다.
: 타입을 변환하는 것, 형변환이라고도한다. 자바에서 상속관계가 잇는 특정 객체는 넓은 범위로 형변환하는
Upcasting
좁은 점위로 형변환하는Downcasting
이 있다.
위 오류를 살펴보면 findAll() 메서드가 반환하는 타입은 Iterable
인데 작성한 타입은 List
이기 때문에 오류가 발생한다. 이를 해결하기 위한 방법이 Casting
인 것이다.
Iterable<Article> articleEntityList = articleRepository.findAll();
List<Article> articleEntityList = (List<Article>)articleRepository.findAll();
데이터타입은 변환하는 방법에는 casting뿐만 아니라 ArrayList
를 사용할 수도 있다. findAll() 메서드가 Iterable이 아닌 ArrayList를 반환하도록 수정하는 것이다.
Repository 코드를 살펴보자.
public interface ArticleRepository extends CrudRepository<Article, Long> {}
코드를 보면 ArticleRepository
가 CrudRepository
를 상속하고 있다.
CrudRepository의 메서드를 Override 해야한다.
Override 방법
오른쪽 버튼을 누르고Generate
->Override Methods
->findAll():Iterable<T>
를 선택하면 자동으로 오버라이딩 코드가 생성된다.
가져온 데이터를 받은 articleEntityList를 뷰 페이지로 전달할 때는 모델을 사용한다.
model.addAttribute()
메서드로 전달할 데이터 묶음인 articleEntityList
를 "articleList"라는 이름으로 등록한다.
뷰 페이지를 설정하는 코드이다. article 디렉토리 안에 index.mustache
파일이 return되도록 한다.
앞서 모델에서 articlesList라는 이름으로 articlesEntityList를 등록했다. 뷰 페이지에서는 이렇게 모델에 등록한 articlesList를 받아온다.
어이 데메..! 키미노 턴 데스다