JPA를 이용하면 페이징이 매우 단순해진다. 구현의 추상성은 개발자가 구상하고 그에 대한 구현은 JPA가 해주는 꼴이다.
setFirstResult(int startPosition) : 조회 시작 위치 (0부터 시작)
setMaxResults(int maxResult) : 조회할 데이터 수
이 두개만 있으면 페이징을 구현할 수 있다. 조회 시작위치를 지정하고 조회할 데이터의 수를 넣으면 그만큼의 값을 가져온다.
페이징 구현 코드
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.getUsername() = " + member1.getUsername());
}
맨 위의 포문은 100명의 멤버를 데이터베이스에 넣기 위한 코드.
.setFirstResult()와 .setMaxResults 를 이용해서 시작 위치를 지정하고 가져올 개수를 넣어주면 알아서 페이징 처리가 된다.
과거에 페이징 처리 쿼리르 짰었던 기억을 생각하면 훨씬 간편하긴 하다.
필자는 MySQL로 페이징을 했던 경험을 되짚어보면 어렵지 않았었지만, Oracle 페이징 쿼리를 보니 참 난감했다.
그래서 이러한 JPA페이징 처리를 봤을 때 와 이게 된다고? 라는 생각이 들면 반쯤 성공이라고 본다.