interface를 선언하면 스프링 데이터 JPA가 자동으로 구현 클래스를 대신 생성한다.@Repository // 생략 가능
public interface TeamRepository extends JpaRepository<Team, Long> {
}
@Repository 어노테이션을 생략할 수 있다.
컴포넌트 스캔을 스프링 데이터 JPA가 자동으로 처리
JPA 예외를 스프링 예외로 변환하는 과정도 자동으로 처리
public interface MemberRepository extends JpaRepository<Member, Long> {
}
JpaRepository 인터페이스 : 공통 CRUD 제공
Generic
JpaRepository 공통 기능 인터페이스
public interface JpaRepository<T, ID extends Serializable>
extends PagingAndSortingRepository<T, ID>
{
...
}
JpaRepository를 사용하는 인터페이스
public interface MemberRepository extends JpaRepository<Member, Long> {
}
❗ T findOne(ID) 👉 Optional<T> findById(ID) 변경
T : 엔티티ID : 엔티티의 식별자 타입S : 엔티티와 그 자식 타입save(S) : 새로운 엔티티는 저장하고, 이미 있는 엔티티는 병합delete(T) : 엔티티 하나를 삭제
EntityManager.remove() 호출findById(ID) : 엔티티 하나를 조회
EntityManager.find() 호출getOne(ID) : 엔티티를 프록시로 조회
EntityManager.getReference() 호출findAll(…) : 모든 엔티티를 조회
(Sort)이나 페이징(Pageable) 조건을 파라미터로 제공✅ JpaRepository는 대부분의 공통 메서드를 제공