List<Member> result = em.createQuery("select m from Member m order by m.age desc", Member.class)
.setFirstResult(0)
.setMaxResults(10)
.getResultList();
JPQL의 페이징은 이런식으로만 작성하면 된다.
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는 이렇게 설명만 바꾸면 알아서 쿼리문들 만들어서 요청하기에 좋다.
[ JPA ] 페치 조인 (fetch join) - 기본 (0) | 2022.02.02 |
---|---|
[ JPA ] JPQL 경로 표현식 (0) | 2022.01.31 |
[ JPA ] 값 타입 리스트 동작 방식 (0) | 2022.01.28 |
[ JPA ] 임베디드 타입 (0) | 2022.01.26 |
[ JPA ] CASCADE는 어디에 사용할까 (persist 한 번만 쓰고 싶을 때) (0) | 2022.01.22 |