[Spring] Repository 인터페이스 설계

WOOK JONG KIM·2022년 10월 26일
0
post-thumbnail

Spring data JPA는 JpaRepository를 기반으로 쉽게 DB를 사용할 수 있는 아키텍처 제공

스프링 부트로 JpaRepository를 상속하는 인터페이스를 생성하면, 기존의 다양한 메서드 쉽게 활용 가능

생성

public interface ProductRepository extends JpaRepository<Product,Long> {}

상속 받을 땐 대상 엔티티기본값 타입을 지정해야 함

ex) JpaRepository<Product,Long>

@NoRepositoryBean
public interface JpaRepository<T, ID> extends PagingAndSortingRepository<T, ID>, QueryByExampleExecutor<T> {
    List<T> findAll();

    List<T> findAll(Sort sort);

    List<T> findAllById(Iterable<ID> ids);

    <S extends T> List<S> saveAll(Iterable<S> entities);

    void flush();

    <S extends T> S saveAndFlush(S entity);

    <S extends T> List<S> saveAllAndFlush(Iterable<S> entities);

    /** @deprecated */
    @Deprecated
    default void deleteInBatch(Iterable<T> entities) {
        this.deleteAllInBatch(entities);
    }

    void deleteAllInBatch(Iterable<T> entities);

    void deleteAllByIdInBatch(Iterable<ID> ids);

    void deleteAllInBatch();

    /** @deprecated */
    @Deprecated
    T getOne(ID id);

    /** @deprecated */
    @Deprecated
    T getById(ID id);

    T getReferenceById(ID id);

    <S extends T> List<S> findAll(Example<S> example);

    <S extends T> List<S> findAll(Example<S> example, Sort sort);
}

JpaRepository의 상속 구조

타 리포지토리에서 만들어진 메서드는 모두 생성한 ProductRepository에서도 사용할 수 있음

Repository 메서드 생성 규칙

리포지토리에서는 몇가지 규칙에 따라 커스텀 메서드 생성 가능

일반적으로 CRUD에서 따로 생성해서 사용하는 메서드는 대부분 Read에 해당하는 Select 쿼리 밖에 없음
-> 엔티티 저장,갱신,삭제 시에는 별다른 규칙 필요 X

리포지토리에서 제공하는 기본 조회 메서드는 기본값으로 단일 조회 + 전체 엔티티 조회만 지원하기에 필요에 따라 다른 조회 메서드 필요

메서드 이름은 카멜 형식으로 하여야 JPA 에서 정상적으로 인식하고 쿼리를 만들어줌

조회 메서드(find)에 조건으로 붙일 수 있는 몇가지 기능

  • FindBy : SQL 문의 where 절 역할, 뒤에 엔티티 필드값 입력
    ex)FindByName(String name)

  • AND,OR : 조건을 여러 개 설정하기 위해 사용
    ex)FindByNameAndEmail(String name, String email)

  • Like/NotLike : SQL문의 like 기능, 특정 문자를 포함하는지 여부를 조건으로 추가
    Containing, Contains와 비슷

  • StartsWith/StartingWith : 특정 키워드로 시작하는 문자열 조건 설정

  • EndsWith/EndingWith : 특정 키워드로 끝나는 문자열 조건 설정

  • IsNull/IsNotNull : 레코드 값이 Null이거나 Null이 아닌 값 검색

  • True/False : Boolean 타입의 레코드를 검색할 때 사용

  • Before/After : 시간을 기준으로 값 검색

  • LessThen/GreaterThen : 특정 값(숫자)를 기준으로 대소 비교 시 사용

  • Between : 두 값(숫자) 사이의 데이터를 조회

  • OrderBy: SQL문에서 order by와 동일한 기능 수행
    ex) 가격순으로 이름 조회 수행 List< Product > findbyNameOrderByPriceAsc(String name);

  • countBy : SQL문의 count 기능, 결과값의 갯수 출력

profile
Journey for Backend Developer

0개의 댓글