[JPA 기본 - JPQL] 페이징

강신현·2022년 7월 27일
0

✅ setFirstResult() ✅ setMaxResults()


페이징

JPA는 페이징을 다음 두 API로 추상화한다.
1. setFirstResult(int startPosition) : 조회 시작 위치 (0부터 시작)
2. setMaxResults(int maxResult) : 조회할 데이터 수

  • Main
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);
}

👉 결과
Member에서 toString을 오버라이드 해주지 않으면 아래처럼 나옴

member1 = jpql.Member@5b9499fe
member1 = jpql.Member@69cd1085
...
  • Member
@Entity
public class Member {

    @Id
    @GeneratedValue
    private Long id;
    private String username;
    private int age;

    @ManyToOne
    @JoinColumn(name = "TEMA_ID")
    private Team team;

    // getter (생략)
    // setter (생략)

    @Override
    public String toString(){
        return "Member{" +
                "id=" + id +
                ", username='" + username + '\'' +
                ", age=" + age +
                // ", team=" + team + -> team의 toString에서도 양방향으로 호출되어 스택오버플로 에러가 날 수 있으므로 없애주는 것이 좋다
                '}';
    }

}

👉 결과

result.size = 10
member1 = Member{id=100, username='member99', age=99}
member1 = Member{id=99, username='member98', age=98}
member1 = Member{id=98, username='member97', age=97}
member1 = Member{id=97, username='member96', age=96}
member1 = Member{id=96, username='member95', age=95}
member1 = Member{id=95, username='member94', age=94}
member1 = Member{id=94, username='member93', age=93}
member1 = Member{id=93, username='member92', age=92}
member1 = Member{id=92, username='member91', age=91}
member1 = Member{id=91, username='member90', age=90}
profile
땅콩의 모험 (server)

0개의 댓글