본문 바로가기
Spring/JPA

쿼리메소드 - 정렬처리

by YoonJong 2022. 10. 9.
728x90

정렬처리하는 방법 

 

메소드로도 가능하지만,

List<Product> findByNameOrderByPrice(String name);

너무 길어지면 보기힘들다는 단점이 있어 파라미터로 생성한다.

그리고, 한가지 조건만이 아닌 여러 조건도 충족할 수 있는 장점이 있다.

public interface ProductRepository extends JpaRepository<Product, Long> {

    List<Product> findByName(String name, Sort sort);
}

 

테스트 코드

@Test
void sortingAndPagingTesT() {
    Product product1 = new Product();
    product1.setName("펜");
    product1.setPrice(1000);
    product1.setStock(100);
    product1.setCreatedAt(LocalDateTime.now());
    product1.setUpdatedAt(LocalDateTime.now());

    Product product2 = new Product();
    product2.setName("펜");
    product2.setPrice(2000);
    product2.setStock(200);
    product2.setCreatedAt(LocalDateTime.now());
    product2.setUpdatedAt(LocalDateTime.now());

    Product product3 = new Product();
    product3.setName("펜");
    product3.setPrice(3000);
    product3.setStock(300);
    product3.setCreatedAt(LocalDateTime.now());
    product3.setUpdatedAt(LocalDateTime.now());

    productRepository.save(product1);
    productRepository.save(product2);
    productRepository.save(product3);


    System.out.println("펜이라는 이름으로 검색하고 가격오름차순 검색");
    productRepository.findByName("펜", Sort.by(Sort.Order.asc("price")));

    System.out.println("펜이라는 이름으로 검색하고 가격오름차순 검색 후 재고로 내림차순");
    productRepository.findByName("펜", Sort.by(Sort.Order.asc("price"), Sort.Order.desc("stock")));

}


실행 시 쿼리

펜이라는 이름으로 검색하고 가격오름차순 검색
Hibernate: 
    select
        product0_.number as number1_0_,
        product0_.created_at as created_2_0_,
        product0_.name as name3_0_,
        product0_.price as price4_0_,
        product0_.stock as stock5_0_,
        product0_.updated_at as updated_6_0_ 
    from
        product product0_ 
    where
        product0_.name=? 
    order by
        product0_.price asc
        
펜이라는 이름으로 검색하고 가격오름차순 검색 후 재고로 내림차순
Hibernate: 
    select
        product0_.number as number1_0_,
        product0_.created_at as created_2_0_,
        product0_.name as name3_0_,
        product0_.price as price4_0_,
        product0_.stock as stock5_0_,
        product0_.updated_at as updated_6_0_ 
    from
        product product0_ 
    where
        product0_.name=? 
    order by
        product0_.price asc,
        product0_.stock desc

페이징 처리

- 데이터베이스의 레코드를 개수로 나누어 페이지를 구분하는 것을 의미

 ex) 25개의 레코드 -> 7개씩 총 4개의 페이지로 구분하고 특정 페이지를 가져오는 것

 

 

728x90

'Spring > JPA' 카테고리의 다른 글

JPQL 과 QueryDsl 의 차이 (기초)  (0) 2022.10.09
Querydsl 설정  (0) 2022.10.09
JPQL - Query타입, 결과조회, 파라미터, 프로젝션, 페이징, 조인  (0) 2022.09.27
즉시로딩 지연로딩  (0) 2022.09.27
JPA 프록시  (1) 2022.09.26

댓글