실전! 스프링 데이터 JPA

Ch02. 공통 인터페이스 기능 - 공통 인터페이스 분석

webmaster 2021. 12. 25. 16:09
728x90

JpaRepository를 변경만 하면 DB를 변경할 수 있다.

JpaRepository - PaginAndSortingRepository - CrudRepository 분석

JpaRepository 분석

  • 여러 기능이 있다.
  • package org.springframework.data.jpa.repository; 안에 존재한다.
  • PagingAndSortingRepository<T, ID>, QueryByExampleExecutor <T>를 상속한다.

PagingAndSortingRepository 분석

  • package org.springframework.data.repository; 안에 존재한다.
  • 페이징은 DB에 상관없이 공통으로 해당 기능을 사용할 수 있다.
  • CrudRepository<T, ID> 를 상속한다.

CrudRepository 분석

  • Repository를 상속한다.

제네릭 타입

  • T : 엔티티
  • ID : 엔티티의 식별자 타입
  • S : 엔티티와 그 자식 타입

주요 메서드

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

도메인에 특화된 기능을 어떻게 해결할까?

public class MemberRepositoryImpl extends MemberRepository{
    //이걸 다 구현 해야된다.
    //내가 원하는 기능만 구현 해야되는데 다구현 하는 것을, 어떻게 해결 할까?
    @Override
    public List<Member> findByUsername(String username) {
        return null;
    }

    @Override
    public List<Member> findAll() {
        return null;
    }
	....
   
}

참고: JpaRepository는 대부분의 공통 메서드를 제공한다.

 

728x90