본문 바로가기
자바/JPA

[JPA/Java] 페이징 API

by drCode 2023. 5. 3.
728x90
반응형

JPA는 페이징을 다음 두 API로 추상화하였다.

(1) setFirstResult(int startPosition)  :조회 시작 위치 ( 0 부터 시작 )

(2) setMaxResults(int maxResult) : 조회할 데이터 수

 

ex)

//페이징 쿼리
String jpql = "select m from Member m order by m.name desc";
List<Member> resultList = em.createQuery(jpql, Member.class)
                            .setFirstResult(10)
                            .setMaxResults(20)
                            .getResultList();

 

JpaMain.java

for (int i = 0; i < 100; i++) {
    Member member = new Member();
    member.setUsername("member " + i);
    member.setAge(i);
    em.persist(member);
}

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

System.out.println("result = " + result.size());
for(Member member1 : result) {
    System.out.println("member1 = " + member1);
}

 

Member.java  << toString을 추가해준다.

@Override
public String toString() {
    return "Member{" +
            "id=" + id +
            ", username='" + username + '\'' +
            ", age=" + age +
            '}';
}

↑↑↑ team 은 제외한다. 왜냐하면 서로를 참조하다보니 무한루프에 빠질 수 있다.

 

H2Dialect

페이징 API를 적용한 후 호출된 쿼리이다.

 

 

※ persistence.xml 에서

 

hibernate.dialect 의 속성을 바꿔주면 다른 DBMS의 방언을 볼 수 있다.

 

<!--- 기존 --->
<property name="hibernate.dialect" value="org.hibernate.dialect.H2Dialect"/>

 

설정 변경 후 ↓↓↓

 

<!-- 오라클 -->
<property name="hibernate.dialect" value="org.hibernate.dialect.Oracle12cDialect"/>

 

Oracle12cDialect

↑↑↑ Oracle  방언이 적용된 쿼리이다.

 

페이징 처리 시 자동으로 ROWNUM 을 적용한 것을 확인할 수 있다.

 

MySQL 방언

↑↑↑ MySQL  방언이 적용된 쿼리이다.

728x90
반응형

'자바 > JPA' 카테고리의 다른 글

[JPA/Java] JPQL 서브쿼리  (0) 2023.05.09
[JPA/Java] JPQL 조인(Join)  (0) 2023.05.09
[JPA/Java] JPQL Projection(프로젝션)  (0) 2023.04.28
[JPA/Java] JPQL 기본 문법과 기능  (0) 2023.04.27
[JPA/Java] 객체지향 쿼리 언어 종류  (0) 2023.04.27

댓글