Spring Boot (7) Spring Data JPA

넙데데맨·2022년 8월 1일
0

JPQL

JPA Query Language
JPA에서 사용할 수 있는 쿼리를 의미한다.
JPQL은 테이블이나 칼럼이름 대신 엔티티 객체를 대상으로 수행하는 쿼리다. 따라서 매핑된 엔티티의 이름과 필드의 이름을 사용한다.

기본 구조

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

쿼리 메소드

JPQL은 별도의 메소드를 정의해서 사용한느 경우가 많으며 간단한 쿼리문을 작성하기 위해 사용되는 것이 쿼리 메소드이다.

생성

동작을 결정하는 주제와 조건을 지정하는 서술어로 구분
주체By서술어 방식으로 사용된다.
ex) List<Person> findByLastnameAndEmail(String lastName, StringEmail
(리턴타입) + {주제 + 서술어(속성)} 구조

주제 키워드

...에 해당하는 도메인(엔티티)를 표현할 수 있다.
Repository에선 이미 도메인을 설정한 후 메서드를 사용하기 때문에 생략하기도 한다.

find...By read...By get...By
query...By search...By stream...By
조회기능 수행 메소드
Optional<Product> findAllByNumber(Long number);
Product queryByNumber(Long number)

exists...By

특정 데이터 존재 확인 키워드 / boolean

count...By

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

delete...By / remove...By

삭제 쿼리 수행 후 리턴 타입이 없거나 삭제한 횟수 리턴

...First<Number>... / ...Top<Number>...

조회된 결과값의 개수를 제한하는 키워드 number 생략 시 단 건 조회
List<Product> findFirst10ByName(String name)

조건자 키워드

JPQL 서술어 부분에서 사용할 수 있는 조건자 키워드

Is / Equals

값 일치를 조건으로 사용하는 키워드(도메인을 받으므로 생략되는 경우가 많다)

Not

값 불일치를 조건으로 사용하는 키워드

Null / NotNull

null 확인 조건자 키워드

True / False

boolean 타입으로 지정된 칼럼 값 확인

And / Or

GreaterThan / LessThan / Between

숫자, datetime 칼럼 대상 비교연산에 사용하며 경계값을 포함하려면 Equals 키워드 사용
List<Product> findByPriceGreaterThanEqual(Long price);

StartingWith / EndingWith / Containing / Like

일부 일치 여부를 확인하는 조건자 키워드

정렬과 페이징 처리

정렬 처리(OrderBy)

오름차순 Asc 내림차순 Desc 키워드 사용
List<Product> findByNameOrderByNumberAsc(String name);
우선 순위 기준 설정 시 And Or 키워드 사용하지 않고 차례대로 작성
List<Product> findByNameOrderByNumberAscPriceDesc(String name);

정렬 처리(매개변수)

Sort, Order 객체를 활용해 쿼리문 작성

productRepository.findByName("펜",Sort.by(Order.asc("price"), Order.desc("stock")));

페이징 처리

레코드를 개수를 나눠 페이지를 구분하는 것으로 JPA 에서는 Page와 Pageable 사용

쿼리 메소드 예시

Page<Product> findByName(Stirng name,Pageable pageable)

페이징 쿼리 메소드 호출

Page<Product> productPage = productRepository.findByName("펜",PageRequest.of(0,2));
Return 타입으로 Page를 받아야하며 PageRequest 클래스를 사용한다.

PageRequest

Pageable의 구현체로 of 메소드를 통해 PageRequest 객체를 생성한다.

of 메소드

of(int page, int size)
of(int page, int size, Sort)
of(int page, int size, Direction, String ..., properties)
page 페이지 번호(0부터 시작)
size 페이지당 데이터 개수
Sort 정렬
Direction 정렬 방향
... 속성
properties Sort.by(direction,properties)에 의해 정렬

profile
차근차근

0개의 댓글