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.dto.MemberDto;
|
||||||
import com.example.springdatajpa.entity.Member;
|
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.JpaRepository;
|
||||||
import org.springframework.data.jpa.repository.Query;
|
import org.springframework.data.jpa.repository.Query;
|
||||||
import org.springframework.data.repository.query.Param;
|
import org.springframework.data.repository.query.Param;
|
||||||
@@ -32,4 +35,10 @@ public interface MemberRepository extends JpaRepository<Member, Long> {
|
|||||||
List<Member> findListByUsername(String username); // 컬렉션
|
List<Member> findListByUsername(String username); // 컬렉션
|
||||||
Member findMemberByUsername(String username); // 단건
|
Member findMemberByUsername(String username); // 단건
|
||||||
Optional<Member> findOptionalByUsername(String username); // Optional
|
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.beans.factory.annotation.Autowired;
|
||||||
import org.springframework.boot.test.context.SpringBootTest;
|
import org.springframework.boot.test.context.SpringBootTest;
|
||||||
import org.springframework.dao.IncorrectResultSizeDataAccessException;
|
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.test.annotation.Rollback;
|
||||||
import org.springframework.transaction.annotation.Transactional;
|
import org.springframework.transaction.annotation.Transactional;
|
||||||
|
|
||||||
@@ -178,5 +182,39 @@ public class MemberRepositoryTest {
|
|||||||
assertThrows(IncorrectResultSizeDataAccessException.class,
|
assertThrows(IncorrectResultSizeDataAccessException.class,
|
||||||
() -> memberRepository.findOptionalByUsername("ddd")); // 반환 타입은 단건 인데 여러 건이 조회 되었을 경우 예외 발생
|
() -> 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