프로그래밍/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
반응형