Search
Duplicate
📒

[스프링 JPA] 03-3. 메서드 이름 쿼리 보충

상태
완료
수업
JPA
주제
JPA
4 more properties
참고

Query Methods

NOTE
JPA Repository에서 어떤 형태로 이름을 작성하면 어떻게 동작하는지 제대로 알아보기!
Query Method의 이름은 Subject PartPredicate Part로 구분된다.
1번째 By까지를 Subject Part, 이후를 Predicate Part로 칭한다.

Subject Part

NOTE
찾고자 하는 주제에 해당된다!
별도의 설정이 없다면 모든 컬럼을 조회하고, LimitDistinct의 설정이 가능하다!

findAll

NOTE
findAll()
Java
복사
DB에서 전체 값을 list로 불러올 때 사용한다.

find...By

NOTE
Optional<User> findById(Long id); List<User> findAllById(List<Long> ids);
Java
복사
Entity를 조회할 때 사용되는 키워드이다.
read, get, query, search, stream등 을 사용할 수도 있으나 find를 가장 많이씀

exists...By

NOTE
boolean existsById(Long id);
Java
복사
조회 유무를 boolean 타입으로 반환한다.

counts...By

NOTE
long countByActive(boolean active);
Java
복사
검색 결과에 따른 총 record수를 반환한다.

...First<number>... , …Top<number>...

NOTE
Optional<User> findFirstByOrderByIdDesc(); Optional<User> findTopByOrderByNameAsc();
Java
복사
조회할 query결과 값 수를 제한하는 키워드인 First, Top이다.
단순하게 처음 쿼리를 조회하는 방식이면 위와같이 사용할 수 있다.
Page<User> findFirst5ByStatus(String status, Pageable pageable); Slice<User> findTop10ByType(String type, Pageable pageable); List<User> findFirst10BySex(String sex, Sort sort); List<User> findTop3ByStatus(String status, Pageable pageable);
Java
복사
다만 조회하고자 하는 쿼리가 1개이상인 경우 Pageable 또는 Sort와 같은 인자를 설정해줘야 한다!
[ 참고]
PageableSortnull을 허용하지 않기 때문에, 해당 인자에 null이 들어가면 에러가 발생한다!
만일 Sort나, Pageable을 사용하고 싶지 않을 경우에는 Sort.unsorted(), Pageable.uppaged()를 사용하면 된다!

Predicate Part

NOTE
By 이후 부분으로, 검색정렬 조건을 작성한다!
검색 조건을 설정하는 Predicate keyword를 먼저 살펴본다!

[Is]

NOTE
Optional<User> findByEmail(String email); Optional<User> findByEmailIs(String email); Optional<User> findByEmailEquals(String email);
Java
복사
기본 일치 검색
키워드를 생략해도 동일하게 작동되며, 동일한 기능의 키워드로 Equals가 있다.

[Is]Not

NOTE
Optional<User> findByEmailNot(String email); Optional<User> findByEmailIsNot(String email);
Java
복사
컬럼 단순 불일치 조건

[Is]Null, [Is]NotNull

NOTE
Optional<User> findByUpdatedAtNull(); Optional<User> findByUpdatedAtIsNull();
Java
복사

[Is]Null

컬럼값이 NULL인 레코드를 검색한다

[Is]NotNull

컬럼값이 NotNull인 레코드를 검색한다.

[Is]Empty, [Is]NotEmpty

NOTE
Optional<User> findByNameEmpty();
Java
복사

[Is]Empty

컬럼값이 Null이거나, 빈 문자열인 레코드를 검색한다.

[Is]NotEmpty

컬럼값이 Null이 아니거나, 빈 문자열이 아닌 레코드를 검색한다.

[Is]True, [Is]False

NOTE
List<User> findByActiveTrue(); List<User> findByActiveFalse();
Java
복사

[Is]True

boolean 타입 컬럼의 True를 검색한다.

[Is]False

boolean 타입 컬럼의 False를 검색한다.

And

NOTE
List<User> findByTypeAndActive(String type, String active);
Java
복사
조건을 and조건으로 엮고 싶을 때 사용한다.

Or

NOTE
List<User> findByTypeOrActive(String type, String active);
Java
복사
조건을 or조건으로 엮고 싶을 떄 사용한다.

[Is]GreaterThan, [Is]LessThan, [Is]Between

NOTE
List<User> findByAgeLessThan(int age); List<User> findByAgeGreaterThanEqual(int age); List<User> findByAgeGreaterThanEqualAndAgeLessThanEqual(int age1, int age2);
Java
복사
비교 연산을 지원하는 numeric, datetime 데이터타입의 컬럼에 설정할 수 있는 연산자다.
키워드 뒤에 Equal을 붙여 이상, 이하같은 조건을 설정할 수도 있다.