JPA/JPA 기본

40. 페이징

sdafdq 2023. 10. 31. 07:42

페이징이란 한 화면에서 보여주는 데이터의 범위를 결정하는 일련의 방법이라고 하는데,

뭐 mysql에서 limit 하고 하던 걸 페이징 이라고 하는 것 같다.

 

JPA는 페이징을 추상화 해버림

 

JPA에서는 페이징 할 때 2가지만 쓰면 됨.

 

setFirstResult(인덱스) : 조회 시작 위치

setMaxResults(인덱스) : 조회 끝 위치.

 

List<Member> result = em.createQuery("select m from Member m order by m.age desc", Member.class)
        .setFirstResult(0)
        .setMaxResults(10)
        .getResultList();

for (Member m : result) {
    System.out.println("result = " + m.getUsername());
    System.out.println("result = " + m.getAge());
}

이렇게 하면 됨. 조회 시작위치, 조회 끝 위치 정해주면 됨. 저 쿼리 order by desc니까 높은순에서 부터 0(0이 가장 높은)부터 10개 가져옴.

그러면 쿼리가

Hibernate: 
    /* select
        m 
    from
        Member m 
    order by
        m.age desc */ select
            m1_0.id,
            m1_0.age,
            m1_0.team_id,
            m1_0.username 
        from
            Member m1_0 
        order by
            m1_0.age desc offset ? rows fetch first ? rows only

이렇게 나감.

이게 페이징은 진짜 방언마다 다름. 오라클은 뭐 3depth 해가지고 무슨 3중 반복문처럼..

근데 JPA? 하이버네이트?는 그 방언을 지원해 주니..

 

 

'JPA > JPA 기본' 카테고리의 다른 글

42. 서브쿼리  (0) 2023.10.31
41. 조인  (0) 2023.10.31
39. 프로젝션(select)  (0) 2023.10.30
38. JPQL 기본 문법  (0) 2023.10.30
37. JPQL  (0) 2023.10.30