๐ŸŒ WEB/JPA

JPA Pageable ์‚ฌ์šฉํ•˜๊ธฐ

์• ์ •์“ฐ 2021. 2. 3. 13:36

Page๊นŒ์ง€ ์™”๋‹ค๋Š”๊ฑด... ๊ธฐ๋ณธ์ ์ธ CRUD๋ฅผ ์•Œ๊ณ  ๊ณ„์‹  ์ƒํƒœ๋กœ ์ดํ•ดํ•˜๊ณ  ์ž‘์„ฑํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค!

 

ํ• ์ผ : ๊ฐ„๋‹จํ•œ ๋ฆฌ์ŠคํŠธ ๋ฐ์ดํ„ฐ์— Page, Sort ๊ตฌํ˜„ํ•˜์—ฌ API๋ฅผ ๊ตฌํ˜„ํ•œ๋‹ค.

 

Service

Entity์ž์ฒด๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š”๊ฑด ์ ˆ๋•Œ๋กœ ํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— Response dto๋ฅผ ๋งŒ๋“ค์–ด์„œ ๋ฐ˜ํ™˜ํ•˜๊ธฐ๋กœ ํ•ฉ๋‹ˆ๋‹ค.

Repository์—์„œ ๋ฐ›์•„์˜จ Page UserEntity๋ฅผ Response์— ๋งตํ•‘ํ•ด์ค˜์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋ฐ˜ํ™˜ํ• ๋•Œ ์ƒ์„ฑ์ž์— stream์„ ์‚ฌ์šฉํ•˜์—ฌ 

๊ฐ๊ฐ ๋งตํ•‘ ํ•ด์ค๋‹ˆ๋‹ค! ์—ฌ๊ธฐ์„œ finAny().orElse("") ๋Š” user์˜ ์ด๋ฏธ์ง€๊ฐ€ ํ•„์ˆ˜๋Š” ์•„๋‹ˆ๊ธฐ ๋•Œ๋ฌธ์— NPE์ด ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— null์ผ ๊ฒฝ์šฐ String ํƒ€์ž…์˜ null์„ ๋ฐ˜ํ™˜ํ•˜๊ฒŒ ํ–ˆ์Šต๋‹ˆ๋‹ค. ์ด๋ถ€๋ถ„์€ ์ข€๋” ์ฐพ์•„์„œ ์—…๋ฐ์ดํŠธ ํ•˜๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค!

 

public Page<UserInfoResponse> findAllAuction(Pageable pageable) {
    Page<UserEntity> userEntityPage = userRepository.findAll(pageable);
    return userEntityPage.map(
        user ->
            new UserInfoResponse(
                user.getName(),
                user.getAge(),
                auction.getProfileList().getProfileEntityList().stream()
                    .map(e -> e.getImagePath())
                    .findAny()
                    .orElse("null")));
  }

Controller

Pageble์„ ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ ๋ฐ›๋Š”๋ฐ Client Test ์—์„œ ์ฒ˜๋Ÿผ QueryParams์— ์˜ต์…˜์„ ์ฃผ๋Š” ๋ฐฉ์‹์œผ๋กœ ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ์ „๋‹ฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  @GetMapping("/user/list")
  public Page<UserInfoResponse> findAllUser(Pageable pageable){
    return userFindService.findAllUser(pageable);
  }

 

Client Test

Postman /GET/ http://localhost:8080/user/list?page=0&size=5&sort=name,DESC

 

 

๋ฐ˜ํ™˜ ํ•˜๋Š” Json

pageble์„ ๋ณด์‹œ๋ฉด clinet์—๊ฒŒ totalPages๊ฐ€ ๋ช‡๊ฐœ๊ฐ€ ์žˆ๋Š”์ง€ ๋ณด์—ฌ์ค„ ์ˆ˜ ์žˆ๊ณ  sort๊ฐ€ ๋˜์–ด์žˆ๋Š”์ง€ ํ™•์ธ๋„ ๊ฐ€๋Šฅํ•˜๋‹ค. 

์ด๋Ÿฐ์‹์œผ๋กœ ๊ตฌํ˜„ํ•˜๋ฉด client์—์„œ๋„ ์ข€๋” ์›ํ™œํ•˜๊ฒŒ ๊ฐœ๋ฐœํ•  ์ˆ˜ ์žˆ์„๊ฑฐ ๊ฐ™๋„ค์š”!

{
    "content": [
        {
            "name": "aejeong",
      		"age": "10",
            "imagePath": "null"
        },
        {
            "name": "jisu",
      		"age": "13",
            "imagePath": "imagePath"
        }
    ],
    "pageable": {
        "sort": {
            "sorted": true,
            "unsorted": false,
            "empty": false
        },
        "offset": 0,
        "pageNumber": 0,
        "pageSize": 5,
        "paged": true,
        "unpaged": false
    },
    "last": true,
    "totalPages": 1,
    "totalElements": 2,
    "size": 5,
    "sort": {
        "sorted": true,
        "unsorted": false,
        "empty": false
    },
    "number": 0,
    "first": true,
    "numberOfElements": 2,
    "empty": false
}
๋ฐ˜์‘ํ˜•