JPQL로 원하는 쿼리문을 작성해보기 (이제,, Pageable을 곁들인)

Yunny.Log ·2022년 6월 15일
0

Spring Boot

목록 보기
68/80
post-thumbnail

내가 하고 싶던 작업

  • 아이템 중 타입이 A,B 인 아이들은 상태가 B,C, 인 아이들만 데려오고
  • 아이템 중 타입이 A,B 가 아닌 아이들은 전부 데려오기
  • 위의 두 부류의 아이템을 합쳐서 Page로 데려오기

처음에 당황했던 점

  • 1) Paging을 구현할 때 url로부터 전달받는 것은 => size=n&page=m

  • 2) 이를 Pageable pageRequest로 controller에서 받아온다.

  • 근데 이 pageable을 적용시키는 곳은 어디냐? => 바로 repository에서 DB단의 아이들을 데려올때 적용

    (EX)

  • 근데 나는 서비스 단에서 필터링 해주는 중 !

    • 이게 조건이 까다로워서 레포지토리에서 데려올 때 필터링이 불가능한 상황 !
  • => 그래서 해당하는 아이템 리스트를 필터링 걸어주고

List <NewItem> newItem 

과 같은 리스트로 만들었다, 그리고 newItem 에 해당하는 아이들을 레포지토리에서 데려오면서 page로 데려오고 싶었던 상황

  • 즉 newItem안에 들은 newItem들을 DB에서 Page에 맞게 반환 원하므로, newItem을 건네주면서 DB 중 newItem에 해당하는 애들만 데려오도록 명령하면 된다.

    @Query(
            "select i from NewItem " +
                    "i where i IN (:newItems)"
    )
    Page<NewItem> findByNewItems(@Param("newItems") List<NewItem> newItems, Pageable pageable);
    

느낀 점

  • jpql 쿼리문 작성이 어렵다고 생각했는데 직접 작성해보니, 몹시 간단하고 내가 원하는대로 데이터 필터링이 가능해서 아주 좋았음

반성 점

  • 쿼리 DSL 을 사용해봐도 좋을 법하다

0개의 댓글