250x250
Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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
- 클린코드
- 연결 리스트
- 클린
- 마크다운
- 쿠키
- 내부 정렬
- 계산 검색 방식
- 스택 큐 차이
- 코드
- WebClient
- 정렬
- CleanCode
- 빅 오 표기법
- code
- 마크다운 테이블
- mysql
- 리스트
- 선형 리스트
- 쿼리메소드
- 배열
- @NoArgsConstructor
- 클래스
- @ComponentScan
- query
- java
- 인터페이스
- @RequiredArgsConstructor
- 자료구조
- 트리
- JsonNode
Archives
- Today
- Total
Developer Cafe
쿼리메소드 페이징처리 본문
728x90
1. 일반버전
예를 들어, 'bno > 0 order by bno desc'라는 조건을 구현한 findByBnoGreaterThanOrderByBnoDesc()
메소드에 Pageable을 적용하면...
public interface BoardRepository extends CrudRepository<Board, Long> {
// bno > ? ORDER BY bno DESC limit ?, ?
public List<Board> findByBnoGreaterThanOrderByBnoDesc(Long bno, Pageable paging);
}
파라미터에 Pageable이 적용되었고, 리턴 타입으로 List<>가 적용되었습니다.
테스트하면...
@Autowired
private BoardRepository repo;
@Test
public void testBnoOrderByPaging() {
// spring boot 2.0.0
Pageable paging = PageRequest.of(0, 10);
// bno가 90보다 큰 데이터를 조회
Collection<Board> results = repo.findByBnoGreaterThanOrderByBnoDesc(0L, paging);
}
Pageable 인터페이스에는 여러 메소드가 존재하기 때문에 이를 구현하는 대신에 PageRequest 클래스를 이용하는것이 편리합니다.
2. PageRequest() 에서 OrderBy도 처리하기
public interface BoardRepository extends CrudRepository<Board, Long> {
public List<Board> findByBnoGreaterThan(Long bno, Pageable paging);
}
@Autowired
private BoardRepository repo;
@Test
public void testBnoPagingSort() {
Pageable paging = PageRequest.of(0, 10, Sort.Direction.ASC, "bno");
Collection<Board> results = repo.findByBnoGreaterThan(0L, paging);
}
결과는 bno값이 1부터 10까지 순서대로 나옵니다.
3. List<T> 대신 Page<T> 사용
public interface BoardRepository extends CrudRepository<Board, Long> {
public Page<Board> findByBnoGreaterThan(Long bno, Pageable paging);
}
@Autowired
private BoardRepository repo;
@Test
public void testBnoPagingSort() {
Pageable paging = PageRequest.of(0, 10, Sort.Direction.ASC, "bno");
Page<Board> results = repo.findByBnoGreaterThan(0L, paging);
System.out.println("PAGE SIZE: " + result.getSize());
System.out.println("TOTAL PAGES: " + result.getTotalPages());
System.out.println("TOTAL COUNT: " + result.getTotalElements());
System.out.println("NEXT: " + result.nextPageable());
}
Page<T>는 단순데이터뿐만아니라, 흔히 웹에서 필요한 데이터들을 추가적으로 처리해 줍니다.
결과는
PAGE SIZE: 10
TOTAL PAGES: 20
TOTAL COUNT: 200
NEXT: Page request [number: 1, size 10, sort: bno: ASC]
728x90
'Spring > JPA' 카테고리의 다른 글
@Query를 사용한 예시 (0) | 2021.07.06 |
---|---|
쿼리메소드에서 order by 처리 (0) | 2021.07.06 |
쿼리메소드에서의 부등호 처리방법 (0) | 2021.07.06 |
Repository에서 2개 이상의 속성을 이용해 엔티티 검색하는 방법 (0) | 2021.07.06 |
Comments