오봉이와 함께하는 개발 블로그
스프링 데이터 JPA - 순수 JPA 페이징과 정렬 본문
728x90
순수 JPA 페이징과 정렬
JPA에서 페이징을 어떻게 할 것인가?
- 조건
- 검색 조건 : 나이가 10살
- 정렬 조건 : 이름으로 내림차순
- 페이징 조건 : 첫 번째 페이지, 페이지당 보여줄 데이터는 3건
JPA 페이징 리포지토리 코드
public List<Member> findByPage(int age, int offset, int limit) {
return em.createQuery("select m from Member m where m.age = :age order by m.usernamdesc", Member.class)
.setParameter("age", age)
.setFirstResult(offset)
.setMaxResults(limit)
.getResultList();
}
public long totalCount(int age) {
return em.createQuery("select count(m) from Member m where m.age = :age", Long.class)
.setParameter("age", age)
.getSingleResult();
}
@Test
public void paging() throws Exception {
// given
memberJpaRepository.save(new Member("member1", 10));
memberJpaRepository.save(new Member("member2", 10));
memberJpaRepository.save(new Member("member3", 10));
memberJpaRepository.save(new Member("member4", 10));
memberJpaRepository.save(new Member("member5", 10))
// page 1 = offset = 0, limit = 10
// page 2 = offset = 10, limit = 10
// ...........
int age = 10;
int offset = 0;
int limit = 3;
// when
List<Member> members = memberJpaRepository.findByPage(age, offset, limit);
long totalCount = memberJpaRepository.totalCount(age)
// then
assertThat(members.size()).isEqualTo(3);
assertThat(totalCount).isEqualTo(5);
}
JPA는 방언이 있어서 사용하는 DB 마다 다른 쿼리가 나가기 때문에 JPQL을 바꾸지 않아도 된다.
인프런 김영한 지식공유자님 강의 : 실전! 스프링 데이터 JPA
728x90
'BE > JPA' 카테고리의 다른 글
스프링 데이터 JPA - 벌크성 수정 쿼리 (0) | 2022.09.13 |
---|---|
스프링 데이터 JPA - 스프링 데이터 JPA 페이징과 정렬 (0) | 2022.09.13 |
스프링 데이터 JPA - 반환 타입 (0) | 2022.09.12 |
스프링 데이터 JPA - 파라미터 바인딩 (0) | 2022.09.08 |
스프링 데이터 JPA - @Query(리포지토리 메소드에 쿼리 정의하기, 값, DTO 조회하기) (0) | 2022.09.08 |
Comments