일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- ubuntu
- Query
- 검색
- 포트
- foreignkey
- appspec.yml
- 외부키
- 2 > /dev/null
- WeNews
- docker명령어
- MySQL
- 서브쿼리
- appspec
- 참조키
- 네이티브쿼리
- 적용우선순위
- querydsl
- 예약
- 추후정리
- EC2
- 메소드명
- ㅔㄴ션
- subquery
- application.yml
- 메세지수정
- 테스트메소드
- AuthenticationEntryPoint
- 테스트
- 컨테이너실행
- 커밋메세지수정
- Today
- Total
제뉴어리의 모든것
순수 jpa 페이징 처리 본문
<참고자료> 자바 ORM 표준 JPA 프로그래밍 김영한 저, 에이콘 |
<소스코드 디자인> http://colorscripter.com |
페이징 처리용 SQL을 작성하는 일은 상당히 지루하고 반복적이다. 그리고 데이터베이스마다 페이징을 처리하는 SQL문법이 다르다.
이를 보완하기 위해 JPA에서는 두 API를 추상화했다.
- setFirstResult(int startPosition) : 조회 시작 위치
- setMaxResults(int maxResult) : 조회할 데이터 수
<데이터>
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
MariaDB [test]> select * from parent; +----+-----------+ | id | name | +----+-----------+ | 1 | testName1 | | 2 | testName2 | | 3 | testName3 | | 4 | testName4 | | 5 | testName5 | | 6 | testName6 | | 7 | testName7 | | 8 | testName8 | +----+-----------+ 8 rows in set (0.00 sec)
MariaDB [test]> |
cs |
<코드>
TypedQuery<Parent> query = em.createQuery("" +
"SELECT p FROM Parent p ORDER BY p.name DESC", Parent.class);
query.setFirstResult(0);
query.setMaxResults(7);
System.out.println(query.getResultList());
<SQL>
1 2 3 4 5 6 7 8 9 10 11 12 13 |
Hibernate: /* SELECT p FROM Parent p ORDER BY p.name DESC */ select parent0_.id as id1_1_, parent0_.name as name2_1_ from Parent parent0_ order by parent0_.name DESC limit ? |
cs |
<결과>
1 2 3 4 5 6 7 |
[Parent{id=8, name='testName8'}, Parent{id=7, name='testName7'}, Parent{id=6, name='testName6'}, Parent{id=5, name='testName5'}, Parent{id=4, name='testName4'}, Parent{id=3, name='testName3'}, Parent{id=2, name='testName2'}] |
cs |
query.setFirstResult(0): 0번째 페이지임을 명시한다.
query.setMaxResult(7): 0번째 페이지에서 7개의 데이터를 가져온다.
데이터 베이스마다 SQL이 다른 것은 물론이고 가장 많이 사용되어지는 오라클의 경우 페이징 쿼리를 따로 공부해야 SQL을 작성할 수 있을 정도로 복잡하다.
만약 페이징처리를 최적화 하고 싶다면 JPA에서 제공하는 API가 아닌 Native Query를 직접 사용해야 한다.
좋아요공감
공유하기
글 요소
구독하기
출처: https://yellowh.tistory.com/130 [노랭이의 공부공간]
'Spring Boot' 카테고리의 다른 글
controller와 dto, html 에서 배열을 주고 받을때 성공 실패 (0) | 2021.03.18 |
---|---|
Spring Boot 현재 세션 가져오기 (0) | 2021.03.10 |
[JPA] 영속성 컨텍스트와 플러시 이해하기 (0) | 2021.02.09 |
Spring MVC의 동작과정 (0) | 2021.02.02 |
ViewResolver란 (0) | 2021.02.01 |