Notice
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- awssecretsmanagerpropertysources
- java.util.list
- micrometer tracing
- traceId
- jpa
- Spring JPA
- asynccustomautoconfiguration
- traceasynccustomautoconfiguration
- spring MVC
- Spring Boot
- kotlin
- EnableWebMvc
- list
- java lambda
- map
- b3-propagation
- @FunctionalInterface
- java list
- ResponseBody
- elasticsearch
- Sleuth
- spring3 spring2 traceid
- HashMap
- spring
- asyncconfigurer
- CompletableFuture
- aws secretmanager
- java
- SpringMVC
- DeferredImportSelector
Archives
- Today
- Total
du.study기록공간
JPA - Pageable을 이용한 Limit설정 방법 본문
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
'JPA' 카테고리의 다른 글
JPA save() Domain Event 추가하기 (0) | 2020.12.13 |
---|---|
JPA Null 처리 방법, List가 null이 아닌 이유 (0) | 2020.09.15 |
JPA - JpaRepository API (0) | 2020.09.11 |
JPA Query update @modifying (0) | 2020.08.26 |
Comments