Spring Data JPA

JPQL

JPA에서 사용할 수 있는 쿼리

쿼리 메서드

  1. 생성
     List<Person> findByLastnameAndEmail(String lastName, String email)
    
    • 쿼리 메서드는 동작을 결정하는주체와 서술어로 구분
  2. 키워드

주제 키워드 - 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 메서드
    1. of(int page, int size): 페이지: 페이지당 데이터 개수
    2. of(int page, int size, Sort): + 정렬
    3. 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

  • 문자열이 아닌 코드로 쿼리를 작성하는 방식
  • 장점
    1. 코드 자동 완성 기능 사용 가능
    2. 문법 오류 검사 가능
    3. 동적 쿼리 생성 가능
  • 예시
      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();
    

homebdy
homebdy 개발에 이제 막 발 담근 사람. 개발에 이제 막 발 담근 사람. 개발에 이제 막 발 담근 사람. 개발에 이제 막 발 담근 사람.
comments powered by Disqus