티스토리 뷰
페이징 API
- order by 가 꼭 들어가야 Sorting이 되면서 페이징이 제대로 되는지 확인 가능하므로 중요하다.
예제
일단 귀찮으니 Member에 toString() 만들고 시작.
@Override
public String toString() {
return "Member{" +
"id=" + id +
", username='" + username + '\'' +
", age=" + age +
'}';
}
JpaMain
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 {
Member member = new Member();
member.setUsername("member1");
member.setAge(10);
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();
}
}
실행하면
List<Member> result = em.createQuery("select m from Member m order by m.age desc",
Member.class)
.setFirstResult(1) // 여기에 숫자를 주면
.setMaxResults(10)
.getResultList();
offset 이 생긴다.
현재는 데이터가 안 나오므로 루프로 코드를 좀 바꿔서 다시 실행한다.
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(1)
.setMaxResults(10)
.getResultList();
System.out.println("result.size = " + result.size());
for (Member member1 : result) {
System.out.println("member1 = " + member1);
}
tx.commit();
}
실행 결과를 보면
정렬 확인 가능
지금은 H2 데이터베이스 방언으로 설정이 되어 있음.
H2 Dialect를 보고 쿼리가 실행될 때에는 기본적으로 엔티티 매핑 정보와 Dialect 정보를 합쳐서 쿼리가 나간다.
그냥 간단하게 .setFirstResult() 와 .setMzxResult() 만 알맞게 쓰면 된다고 생각하고 있으면 된다.
예시
1. 페이징 API - MySQL 방언
2. 페이징 API - Oracle 방언
끝
728x90
반응형
'[데이터베이스] > JPQL' 카테고리의 다른 글
서브 쿼리 (0) | 2023.08.31 |
---|---|
조인 (2) - ON 절 (0) | 2023.08.30 |
조인 (1) - 내부 조인, 외부 조인, 세타 조인 (0) | 2023.08.30 |
프로젝션 (0) | 2023.08.29 |
JPQL 소개 (0) | 2023.08.28 |
Comments