본문 바로가기

Web/JPA

Spring Data JPA 페이징

org.springframework.data.domain.Sort;

org.springframework.data.domain.Page;

org.springframework.data.domain.PageRequest;

 

Sort : 정렬기능

Pageable : 페이징기능

 

* 반환타입

 Page : totalCount 가 포함 된 페이징

 Slice : totalCount 미포함 ( 모바일에 더보기 기능 같은거)

 

 

 public interface MemberRepository extends JpaRepository<Member, Long> {
 	Page<Member> findByAge(int age, Pageable pageable);
 }
 @Test
    public void paging() {

       memberRepository.save(new Member("member1" ,10));
       memberRepository.save(new Member("member2" ,10));
       memberRepository.save(new Member("member3" ,10));
       memberRepository.save(new Member("member4" ,10));
       memberRepository.save(new Member("member5" ,10));

       int age =10;

        PageRequest pageRequest = PageRequest.of(0, 3, Sort.by(Sort.Direction.DESC, "username"));

        Page<Member> page = memberRepository.findByAge(age, pageRequest);

        List<Member> content = page.getContent();
        for (Member member : content) {
            System.out.println("member = " + member);
        }


        assertThat(page.getSize()).isEqualTo(3);
        assertThat(page.getTotalElements()).isEqualTo(5);
        assertThat(page.getNumber()).isEqualTo(0); //현재 페이지 넘버
        assertThat(page.getTotalPages()).isEqualTo(2);
        assertThat(page.isFirst()).isTrue(); //현재가 첫페이지냐?
        assertThat(page.hasNext()).isTrue(); //다음페이지 있냐?
        

    }

 

* 쿼리와 카운트 쿼리를 분리해서 작성가능

public interface MemberRepository extends JpaRepository<Member, Long> {
	@Query(value = "select m from Member m left join m.team",
            countQuery = "select count (m) from Member m")
    Page<Member> findByAge(int age, Pageable pageable);
 }

레프트 조인 , 별도의 where 문이 없으니까 카운트 결과가 같음.

 

* .map 으로 entity -> dto 로 변환 가능

Page<MemberDto> tomap = page.map(m -> new MemberDto(m.getId(), m.getUsername(), null));

 

* 벌크성 수정쿼리

@Modifying
    @Query("update Member m set m.age = m.age + 1 where m.age >= :age")
    int bulkAgePlus(@Param("age") int age);

Modifying 어노테이션을 꼭 추가해줘야 됨

 

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

확장기능  (0) 2020.02.18
API 고급( 지연로딩과 조회성능 최적화)  (0) 2020.02.13
고급매핑  (0) 2020.02.03
다양한 연관관계 매핑  (0) 2020.02.02
연관관계 매핑 기초  (0) 2020.02.01