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
는 대부분의 공통 메서드를 제공