spring data jpa : paging(spring-data-jpa)

This commit is contained in:
haerong22
2021-09-01 23:04:59 +09:00
parent abf70e98f9
commit aadc0919d6
2 changed files with 47 additions and 0 deletions

View File

@@ -2,6 +2,9 @@ package com.example.springdatajpa.repository;
import com.example.springdatajpa.dto.MemberDto;
import com.example.springdatajpa.entity.Member;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.data.domain.Slice;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param;
@@ -32,4 +35,10 @@ public interface MemberRepository extends JpaRepository<Member, Long> {
List<Member> findListByUsername(String username); // 컬렉션
Member findMemberByUsername(String username); // 단건
Optional<Member> findOptionalByUsername(String username); // Optional
@Query(value = "select m from Member m left join m.team t",
countQuery = "select count(m) from Member m")
Page<Member> findPageByAge(int age, Pageable pageable);
Slice<Member> findSliceByAge(int age, Pageable pageable);
}

View File

@@ -7,6 +7,10 @@ import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.dao.IncorrectResultSizeDataAccessException;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Slice;
import org.springframework.data.domain.Sort;
import org.springframework.test.annotation.Rollback;
import org.springframework.transaction.annotation.Transactional;
@@ -178,5 +182,39 @@ public class MemberRepositoryTest {
assertThrows(IncorrectResultSizeDataAccessException.class,
() -> memberRepository.findOptionalByUsername("ddd")); // 반환 타입은 단건 인데 여러 건이 조회 되었을 경우 예외 발생
}
@Test
void paging() {
// given
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"));
// when
Page<Member> page = memberRepository.findPageByAge(age, pageRequest);
Page<MemberDto> toMap = page.map(member -> new MemberDto(member.getId(), member.getUsername(), null));
// then
List<Member> members = page.getContent();
assertEquals(3, members.size());
assertEquals(5, page.getTotalElements());
assertEquals(0, page.getNumber());
assertEquals(2, page.getTotalPages());
assertTrue(page.isFirst());
assertTrue(page.hasNext());
Slice<Member> slice = memberRepository.findSliceByAge(age, pageRequest);
List<Member> content = page.getContent();
assertEquals(3, content.size());
assertEquals(0, slice.getNumber());
assertTrue(slice.isFirst());
assertTrue(slice.hasNext());
}
}