Spring/Data JPA

[Data JPA] 순수 JPA 페이징과 정렬

김긍수 2021. 4. 23. 05:21

스프링 데이터 JPA는 다양한 유형의 반환 타입을 지원한다.

List<Member> findListByUsername(String username); //컬렉션
Member findMemberByUsername(String username); //단건
Optional<Member> findOptinalByUsername(String username); //단건 Optional

 


페이징 조건

  • 검색 조건 : 나이 10살
  • 정렬 조건 : 이름 내림차순
  • 페이징 조건 : 첫번째페이지, 페이지 당 데이터 3건

순수 JPA에서 페이징을 하는 방법

//순수 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.username desc")
                .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();
    }

page가 1일때는 -> offset=0, limit=10

page가 2일때는 -> offset=10, limit=10 이런 식으로 계산이 된다.

페이징할때 전체 개수를 알아야하므로 totalCount를 반환하는 메서드까지 작성해야한다.

 


스프링 데이터 JPA에서 페이징을 하는 방법