paging

ํŽ˜์ด์ง•

๋ฆฌํฌ์ง€ํ† ๋ฆฌ ๋ฉ”์†Œ๋“œ ์ •์˜

Page<Member> findByUsername(String name, Pageable pageable); //count ์ฟผ๋ฆฌ ์‚ฌ์šฉ
Slice<Member> findByUsername(String name, Pageable pageable); //count ์ฟผ๋ฆฌ ์‚ฌ์šฉ ์•ˆํ•จ
List<Member> findByUsername(String name, Pageable pageable); //count ์ฟผ๋ฆฌ ์‚ฌ์šฉ ์•ˆํ•จ
List<Member> findByUsername(String name, Sort sort);

์„œ๋น„์Šค์—์„œ ๋ฆฌํฌ์ง€ํ† ๋ฆฌ ๋ฉ”์†Œ๋“œ ์‚ฌ์šฉ

PageRequest pageRequest = PageRequest.of(0, 3, Sort.by(Sort.Direction.DESC,"username"));
Page<Member> page = memberRepository.findByUsername("who", pageRequest);
List<Member> content = page.getContent();

count์ฟผ๋ฆฌ๋Š” ๋ฌด๊ฒ๊ฒŒ ๋™์ž‘ํ•œ๋‹ค๋Š” ์  ์œ ๋… ์ž์„ธํ•œ ๋ฉ”์†Œ๋“œ๋Š” Page์™€ Slice ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ํ™•์ธ

Spring MVC์—์„œ์˜ ๊ฐ„ํŽธํ•œ ํŽ˜์ด์ง• ์‚ฌ์šฉ

@GetMapping("/members")
public Page<Member> list(Pageable pageable) {
    Page<Member> page = memberRepository.findAll(pageable);
    return page;
}

Pageable์€ ์ธํ„ฐํŽ˜์ด์Šค์ด๊ณ , pageable์ด ๋ฐ›๋Š” ๊ฐ์ฒด๋Š” ์‹ค์ œ๋กœ๋Š” org.springframework.data.domain.PageRequest์ด๋‹ค.

์š”์ฒญ ํŒŒ๋ผ๋ฏธํ„ฐ ์˜ˆ์‹œ) /members?page=0&size=3&sort=id,desc&sort=username,desc page: ํ˜„์žฌ ํŽ˜์ด์ง€, 0๋ถ€ํ„ฐ ์‹œ์ž‘ํ•œ๋‹ค. size: ํ•œ ํŽ˜์ด์ง€์— ๋…ธ์ถœํ•  ๋ฐ์ดํ„ฐ ๊ฑด์ˆ˜ sort: ์ •๋ ฌ ์กฐ๊ฑด์„ ์ •์˜ํ•œ๋‹ค. ์ •๋ ฌ ๋ฐฉํ–ฅ์„ ๋ณ€๊ฒฝํ•˜๊ณ  ์‹ถ์œผ๋ฉด sort ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ์ถ”๊ฐ€ํ•œ๋‹ค. asc๋Š” ๊ธฐ๋ณธ๊ฐ’์ด๋‹ค.

@RequestMapping(value = "/members_page", method = RequestMethod.GET)
public String list(@PageableDefault(size = 12, sort = โ€œusernameโ€, direction = Sort.Direction.DESC) Pageable pageable) {
 ...
}

๊ฐœ๋ณ„ ์„ค์ •์œผ๋กœ ์œ„์™€ ๊ฐ™์ด ํŽ˜์ด์ง€์˜ default๊ฐ’์„ ์ค„ ์ˆ˜ ์žˆ๋‹ค. ์ด๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ํŒŒ๋ผ๋ฏธํ„ฐ๊ฐ€ ์ค„์–ด๋“œ๋Š” ์ด์ ์ด ์ƒ๊ธด๋‹ค.

Page๋Š” map()์„ ์ง€์›ํ•ด์„œ ๋‚ด๋ถ€ ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ค๋ฅธ ๊ฒƒ์œผ๋กœ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ๋‹ค.

@Data
public class MemberDto {
    private Long id;
    private String username;
    public MemberDto(Member m) {
        this.id = m.getId();
        this.username = m.getUsername();
    }
}
// Java
@GetMapping("/members")
public Page<MemberDto> list(Pageable pageable) {
 return memberRepository.findAll(pageable).map(MemberDto::new);
}
// Kotlin
@GetMapping("/members")
fun list(pageable: Pageable): Page<MemberDto>{
 return memberRepository.findAll(pageable).map(MemberDto(it));
}

Last updated