프로그래밍/Spring

[ JPA ] jpql 페이징

Yanoo 2022. 1. 29. 15:12
728x90
반응형

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

JPQL의 페이징은 이런식으로만 작성하면 된다.

  • setFirstResult(int startPosition) : 조회 시작 위치 (0부터 시작)
  • setMaxResults(int maxResult) : 조회할 데이터 수
import javax.persistence.*;
import java.util.List;

public class JpaMain {
    public static void main(String[] args) {
        EntityManagerFactory emf = Persistence.createEntityManagerFactory("hello");
        EntityManager em = emf.createEntityManager();
        EntityTransaction tx = em.getTransaction();
        tx.begin();
        try {

            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();

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

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

            tx.commit();
        } catch (Exception e) {
            tx.rollback();
            e.printStackTrace();
        } finally {
            em.close();
        }
        emf.close();
    }
}

의 결과를 확인해보면,

페이징이 잘되었다.

 

쿼리문을 확인 해보면 현재는 h2 DB라

이런 식으로 실행되지만

DB를 Oracle로 바꾼다면,

이런 식으로 실행된다. 즉 만약 JPA를 사용하지 않고 Mybatis를 사용한다면..... 이렇게 짜야하는 것...

 

JPA는 이렇게 설명만 바꾸면 알아서 쿼리문들 만들어서 요청하기에 좋다.

 


 

728x90
반응형