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);
}
타 리포지토리에서 만들어진 메서드는 모두 생성한 ProductRepository에서도 사용할 수 있음
리포지토리에서는 몇가지 규칙에 따라 커스텀 메서드 생성 가능
일반적으로 CRUD에서 따로 생성해서 사용하는 메서드는 대부분 Read에 해당하는 Select 쿼리
밖에 없음
-> 엔티티 저장,갱신,삭제 시에는 별다른 규칙 필요 X
리포지토리에서 제공하는 기본 조회 메서드는 기본값으로 단일 조회 + 전체 엔티티 조회
만 지원하기에 필요에 따라 다른 조회 메서드 필요
메서드 이름은 카멜 형식으로 하여야 JPA 에서 정상적으로 인식하고 쿼리를 만들어줌
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 기능, 결과값의 갯수 출력