[Spring Data JPA] - 공통 인터페이스 기능

홍정완·2022년 7월 8일
0

JPA

목록 보기
15/38
post-thumbnail
post-custom-banner

공통 인터페이스 설정



  • interface를 선언하면 스프링 데이터 JPA가 자동으로 구현 클래스를 대신 생성한다.

@Repository	// 생략 가능
public interface TeamRepository extends JpaRepository<Team, Long> {
}
  • @Repository 어노테이션을 생략할 수 있다.

    • 컴포넌트 스캔을 스프링 데이터 JPA가 자동으로 처리

    • JPA 예외를 스프링 예외로 변환하는 과정도 자동으로 처리




공통 인터페이스 적용


  • 기존 순수 JPA 기반 테스트에서 사용했던 코드를 그대로 스프링 데이터 JPA 리포지토리 기반 테스트로 변경해도 동일한 방식으로 동작

public interface MemberRepository extends JpaRepository<Member, Long> {
}
  • JpaRepository 인터페이스 : 공통 CRUD 제공

  • Generic

    • T : 엔티티 타입
    • ID : 식별자 타입(PK)



공통 인터페이스 분석


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

profile
습관이 전부다.
post-custom-banner

0개의 댓글