반응형
예제 도메인 모델
주의점
- @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)조건을 파라미터로 제공할 수 있다.
"본 포스트는 작성자가 공부한 내용을 바탕으로 작성한 글입니다.
잘못된 내용이 있을 시 언제든 댓글로 피드백 부탁드리겠습니다.
항상 정확한 내용을 포스팅하도록 노력하겠습니다."
반응형
'Spring' 카테고리의 다른 글
Spring data JPA: save() 메소드 (0) | 2023.02.06 |
---|---|
Spring data JPA: 확장 기능 (0) | 2023.02.06 |
Spring data JPA: 쿼리 메소드 (3) (0) | 2023.02.06 |
Spring data JPA: 쿼리 메소드 (2) (0) | 2023.02.06 |
Spring data JPA: 쿼리 메소드 (1) (0) | 2023.02.06 |