JPA

JPA - Pageable을 이용한 Limit설정 방법

du.study 2020. 9. 17. 23:46
728x90

 

이전에도 간단하게 다룬적이 있지만 따로 기록을 위하여 다시 작성하려합니다.

 

JPA서 limit사용하고 싶은 경우에 Pageable를 사용하게 됩니다.

 

 

우선 데이터와 repository는 다음과 같습니다.

(mysql)

(repository)

public interface AccountRepository extends JpaRepository<Account, Long> {
    List<Account> findByIdGreaterThan(Long id, Pageable pageable);
}

 

해당상태에서 조회하는 쿼리는 다음과같이 할 수 있습니다.

int batch = 2;
long startId = 0;
while(true){
    List<Account> list = accountRepository.findByIdGreaterThan(startId,PageRequest.of(0,batch));
    if(list.size() == 0 )
        break;
    list.stream().forEach(it -> System.out.println(it.getUsername()));
    System.out.println("----------");
    startId +=batch;
}

결과값

test0
test1
----------
test2
test3
----------
test4
----------

 

where 절을 이용하여 인덱스를 사용하며, PageRequest.of(0,batch) 를 통해서 조회한 맨 앞에서 batch(2개) 개수만큼만 가져오는 로직을 간단하게 예제로 사용하였습니다.

 

보통 findAll을 이용하여 paging을 가져오는 방법도 있으나, 보통 where절 orderBy등을 거친 후, limit을 주로 사용합니다.

이때 각 조건을 건 후, PageRequest(0, 가져올 개수) 를 세팅하여 주기적으로 가져오는것으로 limit을 대체할 수 있습니다.

 

728x90