728x90

페이징 6

QueryDSL 페이징 방법

QueryDSL 에서의 페이징 -> offset과 limit를 통해서 페이징을 할 수 있다. LIMIT 숫자 : 출력할 행의 수 OFFSET 숫자 : 몇번째 row부터 출력할 지. (1번째 row면 0) 조회 건수 제한 @Test public void paging1() { List result = queryFactory .selectFrom(member) .orderBy(member.username.desc()) .offset(1) //offset은 0부터 시작(zero index), 현재 코드에서는 1번부터 데이터를 가져오도록 하므로 맨 처음 데이터는 생략됨 .limit(2) //최대 2건 조회 .fetch(); assertThat(result.size()).isEqualTo(2); } 전체 데이터 수..

QueryDSL 2022.07.16

페이징과 정렬(feat.queryDSL)

QItem item = QItem.item; query.from(item) .where(item.price.gt(20000) .orderBy(item.price.desc(), item.stockQuantity.asc()) .offset(10).limit(20) .list(item); 정렬은 orderBy를 사용하는데 쿼리 타입(Q)이 제공하는 asc(), desc()를 사용한다. 페이징은 offset과 limit을 적절히 조합해서 사용하면 된다. 실제 페이징 처리를 하려면 검색된 전체 데이터 수를 알아야 한다. 이때는 list() 대신에 아래 예제와 같이 listResults()를 사용한다. SearchResults result = query.from(item) .where(item.price.gt(10..

QueryDSL 2022.06.17

컬렉션 엔티티 조회 + 페이징을 함께 해결 (feat. default_batch_fetch_size)

먼저 ToOne(OneToOne, ManyToOne) 관계를 모두 페치조인 한다. ToOne 관계는 row수를 증가시키지 않으므로 페이징 쿼리에 영향을 주지 않는다. 컬렉션은 지연 로딩으로 조회한다. 지연 로딩 성능 최적화를 위해 hibernate.default_batch_fetch_size , @BatchSize 를 적용한다. hibernate.default_batch_fetch_size: 글로벌 설정 - 이 옵션을 사용하면 컬렉션이나, 프록시 객체를 한꺼번에 설정한 size 만큼 IN 쿼리로 조회한다. @Repository public class OrderRepository { public List findAllWithMemberDelivery(int offset, int limit) { return..

JPA 2022.06.16

페이징 API

JPA는 페이징을 다음 두 API로 추상화했다. setFirstResult(int startPosition): 조회 시작 위치(0부터 시작한다) setMaxResults(int maxResult): 조회할 데이터 수 TypedQuery query = em.createQuery("SELECT m FROM Member m ORDER BY m.username DESC", Member.class); query.setFirstResult(10); query.setMaxResults(20); query.getResultList(); 위 코드를 분석하면 FirstResult의 시작은 10이므로 11번째부터 시작해서 총 20건의 데이터를 조회한다. 따라서 11~30번 데이터를 조회한다. 또한, 데이터베이스마다 다른 페..

JPA 2022.06.15

JPA에서 pageable을 통해 Paging 간단하게 구현하는 법

Paging 구현하기 가장 먼저 Controller API 에서 Pageable 인터페이스 타입으로 파라미터를 받으면 되는데요. Pageable는 어떤 인터페이스인지 내부 메소드를 간단하게 보고 가겠습니다. 인터페이스가 가진 메소드를 보면 여러가지가 있지만 getPageNumber(), getPageSize(), getOffset() 처럼 페이징을 구현할 때 필요한 값들을 편하게 구할 수 있는 메소드들을 추상화 시켜놓은 것을 볼 수 있습니다. 그래서 이제 시도해보려는 방법은 Spring Data JPA에서 메소드 이름으로 쿼리를 만들 때 페이징을 추가하는 법 입니다. 바로 고고싱! Repository 구현하기 public interface PostRepository extends JpaRepository..

JPA 2022.03.22

(스프링 데이터 JPA) 페이징과 정렬

스프링 데이터 JPA 페이징과 정렬 페이징과 정렬 파라미터 org.springframework.data.domain.Sort : 정렬 기능 org.springframework.data.domain.Pageable : 페이징 기능 (내부에 Sort 포함) 특별한 반환 타입 org.springframework.data.domain.Page : 추가 count 쿼리 결과를 포함하는 페이징 org.springframework.data.domain.Slice : 추가 count 쿼리 없이 다음 페이지만 확인 가능합니다(내부적으로 limit + 1조회함). Page 사용 예제 코드 검색 조건: 나이가 20살 정렬 조건: 이름으로 오름차순 페이징 조건: 첫 번째 페이지, 페이지당 보여줄 데이터는 3건 Page 사용 ..

JPA 2022.02.15
728x90