Pageable

ํŽ˜์ด์ง•, ์ •๋ ฌ์„ ํ•˜๊ธฐ ์œ„ํ•ด ์Šคํ”„๋ง ๋ฐ์ดํ„ฐ JPA๊ฐ€ ์ œ๊ณตํ•˜๋Š” ์ธํ„ฐํŽ˜์ด์Šค

@GetMapping
    public ResponseEntity queryEvents(Pageable pageable, PagedResourcesAssembler<Event> assembler){
        Page<Event> page = this.eventRepository.findAll(pageable);
        var pagedResources = assembler.toModel(page, e-> new EventResource(e));
        pagedResources.add(new Link("/docs/index.html#resources-events#resources-events-list").withRel("profile"));
        return ResponseEntity.ok(pagedResources);
    }

์œ„์™€ ๊ฐ™์ด Repository์—์„œ find์‹œ์— Pageable์„ ๋ณ€์ˆ˜๋ฅผ ๋„ฃ์–ด์ฃผ๋ฉด Repository๋Š” JPARepository๋ฅผ ์ƒ์†๋ฐ›๊ณ  ์ด๋Š” PagingAndSortingRepository๋ฅผ ์ƒ์†๋ฐ›๊ณ  ์žˆ์–ด find์— pageable์†์„ฑ์„ ๋„ฃ์–ด ์ค„ ์ˆ˜ ์žˆ๋‹ค.

๊ทธ๋Ÿฌ๋ฉด ์ฟผ๋ฆฌ๋ฌธ์˜ page,size(default =20),sort(ํ•„๋“œ๋ฉฐ,์ •๋ ฌ ๊ธฐ์ค€(ASC/DESC)์†์„ฑ์œผ๋กœ paginationํ•  ์ˆ˜ ์žˆ๋‹ค.

PagedResourcesAssembler

pagination์„ ์ˆ˜ํ–‰ ํ•œ json๋ฐ์ดํ„ฐ์— link๋ฅผ ์‚ฝ์ž…ํ•ด์ฃผ๊ธฐ์œ„ํ•ด resource๋กœ ๋ณ€ํ™˜ ํ•ด์ฃผ๋Š” ํด๋ž˜์Šค

๋‚ด๋ถ€์ ์œผ๋กœ RepresentationModelAssembler์„ ์ƒ์†๋ฐ›๊ณ  ์žˆ์–ด pageํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ์ฒด๋กœ ๋ฐ”๊พธ๊ณ  ๊ฐ์ฒด์— ๋งํฌ๋ฅผ ์ถ”๊ฐ€ ํ•ด์ค„ ์ˆ˜ ์žˆ๋‹ค.

 var pagedResources = assembler.toModel(page, e-> new EventResource(e));
        pagedResources.add(new Link("/docs/index.html#resources-events#resources-events-list").withRel("profile"));

Last updated