[06] @Query

Veloger·2022년 12월 11일
0

ShopWeb_Project

목록 보기
6/7
  • JPARepository의 메서드를 이용해서 조회 시, 조건이 많아지면 이름만으론 구분하기 힘들다.
  • 그렇기 때문에 직접 쿼리를 작성할 수 있도록 @Query를 지원한다.
  • @Query는 JPQL을 이용해서 작성해야한다.

JPQL

  • 특정 DB SQL에 의존하지 않음.

예시) ->ItemRepository

    @Query("select i from Item i where i.itemDetail like " + // like 다음에 띄어쓰기 해야됨
            "%:itemDetail% order by i.price desc")
    List<Item> findByItemDetail(@Param("itemDetail") String itemDetail);
  • @Param : 파라미터로 넘어온 값을 JPQL에 들어갈 변수로 지정.
    - like % % 사이에 :itemDetail로 값이 들어감

-> ItemRepositoryTest

    @Test
    @DisplayName("@Query를 이용한 상품 조회 테스트")
    public void findByItemDetailTest(){
        this.createItemList();
        List<Item> itemList = itemRepository.findByItemDetail("테스트 상품 상세 설명");
        for(Item item : itemList){
            System.out.println(item.toString());
        }
    }
  • "테스트 상품 상세 설명"을 포함하는 상품 데이터 10개가 가격이 높은 순부터 조회가 된다.

기존 DB에서 사용하던 쿼리 그대로 사용하기

@QuerynativeQuery속성을 사용.

-> ItemRepository

@Query("select i from Item i where i.itemDetail like " +
        "%:itemDetail% order by i.price desc", nativeQuery = true)
List<Item> findByItemDetail(@Param("itemDetail") String itemDetail);

-> ItemRepositoryTest

    @Test
    @DisplayName("nativeQuery를 이용한 상품 조회 테스트")
    public void findByItemDetailTest(){
        this.createItemList();
        List<Item> itemList = itemRepository.findByItemDetail("테스트 상품 상세 설명");
        for(Item item : itemList){
            System.out.println(item.toString());
        }
    }

실행 결과

0개의 댓글

관련 채용 정보