728x90
반응형
JPA는 페이징을 다음 두 API로 추상화하였다.
(1) setFirstResult(int startPosition) :조회 시작 위치 ( 0 부터 시작 )
(2) setMaxResults(int maxResult) : 조회할 데이터 수
ex)
//페이징 쿼리
String jpql = "select m from Member m order by m.name desc";
List<Member> resultList = em.createQuery(jpql, Member.class)
.setFirstResult(10)
.setMaxResults(20)
.getResultList();
JpaMain.java
for (int i = 0; i < 100; i++) {
Member member = new Member();
member.setUsername("member " + i);
member.setAge(i);
em.persist(member);
}
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 = " + result.size());
for(Member member1 : result) {
System.out.println("member1 = " + member1);
}
Member.java << toString을 추가해준다.
@Override
public String toString() {
return "Member{" +
"id=" + id +
", username='" + username + '\'' +
", age=" + age +
'}';
}
↑↑↑ team 은 제외한다. 왜냐하면 서로를 참조하다보니 무한루프에 빠질 수 있다.
페이징 API를 적용한 후 호출된 쿼리이다.
※ persistence.xml 에서
hibernate.dialect 의 속성을 바꿔주면 다른 DBMS의 방언을 볼 수 있다.
<!--- 기존 --->
<property name="hibernate.dialect" value="org.hibernate.dialect.H2Dialect"/>
설정 변경 후 ↓↓↓
<!-- 오라클 -->
<property name="hibernate.dialect" value="org.hibernate.dialect.Oracle12cDialect"/>
↑↑↑ Oracle 방언이 적용된 쿼리이다.
페이징 처리 시 자동으로 ROWNUM 을 적용한 것을 확인할 수 있다.
↑↑↑ MySQL 방언이 적용된 쿼리이다.
728x90
반응형
'자바 > JPA' 카테고리의 다른 글
[JPA/Java] JPQL 서브쿼리 (0) | 2023.05.09 |
---|---|
[JPA/Java] JPQL 조인(Join) (0) | 2023.05.09 |
[JPA/Java] JPQL Projection(프로젝션) (0) | 2023.04.28 |
[JPA/Java] JPQL 기본 문법과 기능 (0) | 2023.04.27 |
[JPA/Java] 객체지향 쿼리 언어 종류 (0) | 2023.04.27 |
댓글