JPQL

방세현·2023년 3월 26일
0

jpa

목록 보기
3/8

JPQL


JPQL은 JPA Query Language의 줄임말로 JPA에서 사용할 수 있는 쿼리를 의미합니다. SQL과의 차이점은 SQL에서는 테이블이나 칼럼의 이름을 사용하는 것과 달리 JPQL은 엔티티 객체를 대상으로 수행하는 쿼리입니다.

SELECT p FROM Product p WHERE p.numper = ?1;

Product = Entity의 타입
p.munber = Entity의 속성


아래는 쿼리 메소드의 주요 키워드들이다. '...'으로 표시한 영역에는 엔티티를 표현할 수 있지만 보통 리포지토리에서 이미 도메인을 설정한 후에 메서드를 사용하기 때문에 중복으로 판단해 생략하기도 한다.




주제 키워드


find...By


조회하는 기능을 수행하는 키워드

리턴타입으론 Colllection이나 Stream에 속한 하위 타입이 올 수 있다.

Optional<Product> findByNumber(Long munber);
List<Product> findAllByName(String name);
Product queryByNumber(Long number);

exists...By


특정 데이터가 존재하는지 확인하는 키워드이다.
리턴타입으론 boolean을 사용한다.

boolean existsByNumber(Long number);

count...By


조회 쿼리를 수행한 후 쿼리 결과로 나온 레코드의 개수를 리턴한다.

long countByName(String name);

delete...By, remove...By


삭제 쿼리를 수행한다.
리턴 타입이 없거나 삭제한 횟수를 리턴한다.

void deleteByNumber(Long number);
long removeByname(String name);

...First(number)..., ...Top(number)...


쿼리를 통해 조회된 결괏값의 개수를 제한하는 키워드이다.
두 키워드는 동일한 동작을 수행하며 주제와 By 사이에 위치한다.
이 키워드는 한 번의 동작으로 여러 건을 조회할 때 사용되며, 단 건으로 조회하기 위해서는 (number)를 생략하면 된다.

 List<Product> findFirst5ByName(String name);
 List<Product> findTop10ByName(String name);



조건자 키워드


Is


값의 일치를 조건으로 사용하는 조건자 키워드이다. 생략되는 경우가 많으며 Equals와 동일한 기능을 수행한다.

Product findByNumbersIs(Long number);
Product findByNumbersEquals(Long number);

(Is)Not


값의 불일치를 조건으로 사용하는 조건자 키워드이다. Is는 생략하고 Not키워드만 사용할 수도 있다.

Product findByNumbersIsNot(Long number);
Product findByNumbersNot(Long number);

(Is)Null, (Is)NotNull


값이 null인지 검사하는 조건자 키워드이다.

List<Product> findByUpdatedAtNull();
List<Product> findByUpdatedIsNull();
List<Product> findByUpdatedAtNotNull();
List<Product> findByUpdatedAtIsNotNull();

(Is)True, (Is)False


boolean 타입으로 지정된 칼럼값을 확인하는 키워드이다.


And, Or


여러 조건을 묶을 때 사용한다.

Product findByNumbersAndName(Long number, String name);
Product findByNumbersOrName(Long number, String name);

(Is)GreaterThan, (Is)LessThan, (Is)Between


비교 연산에 사용할 수 있는 조건자 키워드이다. GreaterThan, LessThan은 비교 대상의 초과/미만의 개념으로 비교 연산을 수행하고, 경곗값을 포함하려면 Equal 키워드를 추가하면 된다.

List<Product> findByPriceIsGreaterThan(Long price);
List<Product> findByPriceGreaterThan(Long price);
List<Product> findByPriceGreaterThanEqual(Long price);
List<Product> findByPriceIsLessThan(Long price);
List<Product> findByPriceLessThan(Long price);
List<Product> findByPriceLessThanEqual(Long price);
List<Product> findByPriceIsBetween(Long lowPrice, Long highPrice);
List<Product> findByPriceBetween(Long lowPrice, Long highPrice);

(Is)StartingWith, (Is)EndingWith, (Is)Containing, (Is)Like


컬럼의 값에서 값이 일부 일치하는지 확인하는 키워드
SQL 문으로 가공될 때 Containing 키워드는 양 끝, StartingWith는 앞, EndingWith는 뒤에 %가 포함됨
Lick 키워드는 %를 명시적으로 기입해줘야 함

0개의 댓글