spring data jpa : paging(spring-data-jpa)
This commit is contained in:
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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());
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user