공통 인터페이스 기능

dongbin_Shin·2021년 7월 29일
2

스프링 데이터 JPA

목록 보기
1/6
post-thumbnail

예제 도메인 모델


주의점

  • @Setter 실무에서 가급적 사용하지 않기
  • @NoArgsConstructor AccessLevel.PROTECTED: 기본 생성자 막고 싶지만, JPA 스펙상 PROTECTED로 열어두어야 함
  • @ToString: 가급적 내부 필드만(연관관계 없는 필드만)

공통 인터페이스 기능

  • 스프링 데이터 JPA 공통 인터페이스

스프링 데이터 JPA가 구현 클래스 대신 생성

  • org.springframework.data.repository.Repository를 구현한 클래스는 스캔 대상 기능

    • 인터페이스밖에 없는 리포지토리가 동작한 이유
    • ex) MemberRepository: memberRepository.getClass() -> class.com.sun.proxy.$ProxyXXX
  • @Repository 생략 가능

    • 컴포넌트 스캔을 스프링 데이터 JPA가 자동으로 처리
    • JPA 예외를 스프링 예외로 변환하는 과정도 자동으로 처리

공통 인터페이스 분석

  • JpaRepository 인터페이스: 공통 CRUD 제공
  • 제네릭은 <엔티티 타입, 식별자 타입> 설정

JpaRepository 공통 기능 인터페이스

public interface JpaRepository<T, ID extends Serializable>
 extends PagingAndSortingRepository<T, ID>
{
 ...
}

공통 인터페이스 구성

주요 메서드

  • save(S): 새로운 엔티티는 저장하고 이미 있는 엔티티는 병합한다.
  • delete(T): 엔티티 하나를 삭제한다. 내부에서 EntityManager.remove() 호출
  • findById(ID): 엔티티 하나를 조회한다. 내부에서 EntityManager.find() 호출
  • getOne(ID): 엔티티를 프록시로 조회한다. 내부에서 EntityManager.getReference()호출
  • findAll(...): 모든 엔티티를 조회한다. 정렬(Sort)이나 페이징(Pageable)조건을 파라미터로 제공할 수 있다.

"본 포스트는 작성자가 공부한 내용을 바탕으로 작성한 글입니다.
잘못된 내용이 있을 시 언제든 댓글로 피드백 부탁드리겠습니다.
항상 정확한 내용을 포스팅하도록 노력하겠습니다."

profile
멋있는 백엔드 개발자

0개의 댓글