Categories
Algorithm🧩
백준 📝
BookReview📕
CleanCode✨
Network 📨
Database 🗄
DevOps☁️
에러 일기📕
Etc💬
Fishy Fish 🎣
Spring🌱
Spring Data JPA
JPQL
JPA에서 사용할 수 있는 쿼리
쿼리 메서드
- 생성
List<Person> findByLastnameAndEmail(String lastName, String email)- 쿼리 메서드는 동작을 결정하는주체와 서술어로 구분
- 키워드
주제 키워드 - find~By: 데이터 조회 - exit~By: 특정 데이터 존재 확인 - count~By: 레코드 개수 반환 - delet~By: 삭제 쿼리 수행
조건자 키워드 - Is: 값의 일치 확인 - Not: 값의 불일치 확인 - Null: 값이 널값인지 확인 - GreaterThan~: 비교 연산
정렬과 페이징 처리
정렬 처리
- ORDER BY: 정렬 기능 키워드
// 상품 정보를 이름으로 검색한 후 상품 번호로 오름차순 정렬 List<Product> findByNameOrderByNumberAsc(String name); List<Product> findByNameOrderByNumberDesc(String name); - 매개변수를 이용한 정렬
List<Product> findByName(String name, Sort sort);Sort객체를 이용해 쿼리문 작성
페이징 처리
데이터베이스의 레코드를 개수로 나눠 페이지를 구분하는 것
- Page 또는 Pageable 사용
Page<Product> findByName(String name, Pageable pageable);- 리턴 타입: Page, 매개변수: Pageable 타입 객체
- PageRequest: of메서드를 통해 생성
- of 메서드
- of(int page, int size): 페이지: 페이지당 데이터 개수
- of(int page, int size, Sort): + 정렬
- of(int page, int size, Direction, String …): +정렬 방향, 속성
@Query 어노테이션
- 직접 JPQL을 작성하는 어노테이션
- 튜닝된 쿼리를 사용하고자 할 때 사용하는 방식
@Query("SELECT p FROM Product p WHERE p.name = :name") List<Product> findByName(@Param("name") String name);
QueryDSL
- 문자열이 아닌 코드로 쿼리를 작성하는 방식
- 장점
- 코드 자동 완성 기능 사용 가능
- 문법 오류 검사 가능
- 동적 쿼리 생성 가능
- 예시
JPAQuery<Product> query = new JPAQuery(entityManager); // QueryDSL사용을 위한 객체 생성 QProduct qProduct = QProduct.product; // 빌더 형식의 쿼리 작성 List<Product> productList = query .from(qProduct) .where(qProduct.name.eq("펜")) .orderBy(qProduct.price.asc()) .fetch();