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