본문 바로가기

Spring/JPA

JPA- 페이징

package jpql;

import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.EntityTransaction;
import javax.persistence.Persistence;
import java.util.List;

public class JpqlMain {
    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++) {
                // 나이가 1씩 증가하는 Member 객체 100개 생성 (0~99)
                Member member = new Member();
                member.setUsername("member"+i);
                member.setAge(i);
                em.persist(member);
            }

            em.flush();
            em.clear();

            // Member 객체를 조회할 때, 나이 역순으로 조회
            List<Member> result = em.createQuery("select m from Member m order by m.age desc", Member.class)
                    .setFirstResult(1)  // 인덱스 1번부터, SetFirstResult: 조회할 시작 번호 (100개의 Member 객체 중 1번이니까 나이는 98)
                    .setMaxResults(10)  // 10개 조회, setMaxResults: 조회할 데이터 개수
                    .getResultList();

            for (Member member : result) {
                System.out.println("member = " + member);  // toString() 처리함
            }

            tx.commit();
        } catch (Exception e) {
            tx.rollback(); // 오류 발생 시 롤백
            e.printStackTrace(); // 에러 내용 출력
        } finally {
            //종료
            em.close();
        }
        emf.close();
    }
}

쿼리문 내부의 "orderby xxx": xxx 순으로 sort

  • setFirstResult(start_idx): 갖고온 데이터들 중 조회 할 시작 인덱스 표시
  • setMaxResults(data_nums): 가져올 데이터 개수  
Hibernate: 
    /* select
        m 
    from
        Member m 
    order by
        m.age desc */ select
            member0_.id as id1_0_,
            member0_.age as age2_0_,
            member0_.TEAM_ID as team_id4_0_,
            member0_.username as username3_0_ 
        from
            Member member0_ 
        order by
            member0_.age desc limit ? offset ?

member = Member{id=99, username='member98', age=98}
member = Member{id=98, username='member97', age=97}
member = Member{id=97, username='member96', age=96}
member = Member{id=96, username='member95', age=95}
member = Member{id=95, username='member94', age=94}
member = Member{id=94, username='member93', age=93}
member = Member{id=93, username='member92', age=92}
member = Member{id=92, username='member91', age=91}
member = Member{id=91, username='member90', age=90}
member = Member{id=90, username='member89', age=89}

'Spring > JPA' 카테고리의 다른 글

JPA-타입 표현  (0) 2023.05.20
JPA- 조인  (0) 2023.05.14
JPA- 프로젝션  (0) 2023.05.12
JPA- 기본 문법과 쿼리 API  (0) 2023.05.07
JPA- 값 타입 컬렉션  (0) 2023.04.30