JPQL Paging API

2023. 4. 16. 01:02·📦 Database/JPQL

💡 페이징 API

JPA는 페이징 API를 다음 두 API로 추상화 해뒀다.

  • 조회 시작위치(0부터 시작)
    • setFirstResult(int startPosition)
  • 조회할 데이터 수
    • setMaxResults(int maxResult)

예시

  • 모든 데이터 베이스의 방언이 동작한다.
  • LIMIT & OFFSET은 MySQL 방언이다.
    • hibernate.dialect를 Oracle12cDialect로 변경해주면
      Oracle 방언인 rownum 3 depth 전략으로 페이징을 짠다.
// Member Class에 toString()을 Override 해준다.
for (int i=0, i<100; i++) {
    Member member = new Member();
    member.setUsername("member" + i);
    member.setAge(i);
    em.persist(member);
}

em.flush();
em.clear();

// desc = 역순
List<Member> resultList = em
    .createQuery("select m from Member m order by m.age desc", Member.class)
    .setFirstResult(1)
    .setMaxResult(10)
    .getResultList();

System.out.println("result.size = " + result.size());
for (Member m : result) {
    System.out.println("m = " + member)
}
SELECT
  M.ID AS ID,
  M.AGE AS AGE,
  M.TEAM_ID AS TEAM_ID,
  M.NAME AS NAME
FROM
  MEMBER M
ORDER BY
  M.name DESC LIMIT ?, offset ?

위 쿼리의 Oracle 방언

SELECT * FROM
  ( SELECT ROW_.*, ROWNUM ROWNUM_
   FROM
      ( SELECT
          M.ID AS ID,
          M.AGE AS AGE,
          M.TEAM_ID AS TEAM_ID,
          M.NAME AS NAME
         FROM MEMBER M
         ORDER BY M.NAME
        ) ROW_
    WHERE ROWNUM <= ?
    )
WHERE ROWNUM_ > ?
저작자표시 (새창열림)

'📦 Database > JPQL' 카테고리의 다른 글

JQPL 다형성 쿼리 & 결과 조회 API  (0) 2023.04.16
JPQL Named Query & Parameter Binding  (0) 2023.04.16
JPQL Projection  (0) 2023.04.16
JPQL Type Query & Sub Query  (0) 2023.04.16
JPQL Basic  (0) 2023.04.16
'📦 Database/JPQL' 카테고리의 다른 글
  • JQPL 다형성 쿼리 & 결과 조회 API
  • JPQL Named Query & Parameter Binding
  • JPQL Projection
  • JPQL Type Query & Sub Query
신건우
신건우
조용한 개발자
  • 신건우
    우주먼지
    신건우
  • 전체
    오늘
    어제
    • 분류 전체보기 (422)
      • 📘 Frontend (71)
        • Markup (1)
        • Style Sheet (2)
        • Dart (8)
        • Javascript (12)
        • TypeScript (1)
        • Vue (36)
        • React (2)
        • Flutter (9)
      • 📘 Backend (143)
        • Java (34)
        • Concurrency (19)
        • Reflection (1)
        • Kotlin (29)
        • Python (1)
        • Spring (42)
        • Spring Cloud (5)
        • Message Broker (5)
        • Streaming (2)
        • 기능 개발 (5)
      • 💻 Server (6)
        • Linux (6)
      • ❌ Error Handling (11)
      • 📦 Database (62)
        • SQL (31)
        • NoSQL (2)
        • JPQL (9)
        • QueryDSL (12)
        • Basic (4)
        • Firebase (4)
      • ⚙️ Ops (57)
        • CS (6)
        • AWS (9)
        • Docker (8)
        • Kubernetes (13)
        • MSA (1)
        • CI & CD (20)
      • 📚 Data Architect (48)
        • Data Structure (10)
        • Algorithm (8)
        • Programmers (17)
        • BaekJoon (5)
        • CodeUp (4)
        • Design Pattern (4)
        • AI (0)
      • ⚒️ Management & Tool (8)
        • Git (7)
        • IntelliJ (1)
      • 📄 Document (10)
        • Project 설계 (6)
        • Server Migration (3)
      • 📄 책읽기 (2)
        • 시작하세요! 도커 & 쿠버네티스 (2)
      • 🎮 Game (4)
        • Stardew Vally (1)
        • Path of Exile (3)
  • 블로그 메뉴

    • 링크

      • Github
    • 공지사항

    • 인기 글

    • 태그

      Lock #Thread #Concurrency
      React #Markdown
      GStreamer #Pipeline
    • 최근 댓글

    • 최근 글

    • hELLO· Designed By정상우.v4.10.0
    신건우
    JPQL Paging API
    상단으로

    티스토리툴바