// Post CRUD를 위한 repository 인터페이스 (MyBatis에서는 Dao라고 불림)

package com.springbootaws.book.springboot.domain.posts;

import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;

import java.util.List;

// JpaRepository<Entity 클래스, PK 타입> 상속시 기본적인 CRUD 기능 제공
// @Repository 어노테이션은 추가할 필요 없음. (단, Entity 클래스와 Entity 레포지토리는 저장 디렉터리가 같아야 한다.)
public interface PostRepository extends JpaRepository<Posts, Long> {
    @Query("SELECT p FROM Posts p ORDER BY p.id DESC")
    List<Posts> findAllDesc();
}

JpaRepository 동작 원리

그런데, JpaRepository는 인터페이스인데 어떻게 JpaRepository 상속 시 기본적인 Repository 기능을 사용할 수 있는 것일까?

⇒ 인터페이스를 상속 받지만, 실제 기능을 사용할 수 있다.