[05] 쿼리 메소드

Veloger·2022년 12월 11일
0

ShopWeb_Project

목록 보기
5/7

Repository 인터페이스에 간단한 네이밍 룰을 이용해 메서드를 작성해서 원하는 쿼리를 실행할 수 있다

[ 규칙 ]

find + (엔티티 이름) + By + 변수이름
  • 엔티티 이름은 생략이 가능하다.

-> ItemRepository의 예시

public interface ItemRepository extends JpaRepository<Item, Long> {

    List<Item> findByItemNm(String itemNm);
  • 이제 해당 메서드를 테스트 코드에서 사용해보자!

-> ItemRepositoryTest.java

// 아이템 리스트 만드는 메서드
public void createItemList(){
        for(int i=1;i<=10;i++){
            Item item = new Item();
            item.setItemNm("테스트 상품" + i);
            item.setPrice(10000 + i);
            item.setItemDetail("테스트 상품 상세 설명" + i);
            item.setItemSellStatus(ItemSellStatus.SELL);
            item.setStockNumber(100); item.setRegTime(LocalDateTime.now());
            item.setUpdateTime(LocalDateTime.now());
            Item savedItem = itemRepository.save(item);
        }
    }

    @Test
    @DisplayName("상품명 조회 테스트")
    public void findByItemNmTest(){
        this.createItemList(); // 1. 아이템들 생성
        List<Item> itemList = itemRepository.findByItemNm("테스트 상품1"); // ItemNm이 테스트 상품1인 아이템을 받기
        for(Item item : itemList){
            System.out.println(item.toString()); // 해당 리스트 출력
        }
    }

실행 결과

Hibernate:
select
	item0_.item_id as item_id1_0_,
    item0_.item_detail as item_det2_0_,
    item0_.item_nm as item_nm3_0_,
    item0_.item_sell_status as item_sel4_0_,
    item0_.price as price5_0_,
    item0_.rec_time as reg_time6_0_,
    item0_.stock_number as stock_nu7_0_,
    item0_.update_time as update_t8_0_,
from
	item item0_
where
	item0_.item_nm=?
    
binding parameter [1] as [VARCHAR] - [테스트 상품1]

여러 조건 처리하기

  • 여러 개의 조건을 이용한 검색 및 정렬도 가능하다.
  • 이 때에는 JPQL을 이용하기도 한다. (2.6절에서..)

1. OR 조건

// 인터페이스
 List<Item> findByItemNmOrItemDetail(String itemNm, String itemDetail);

// 테스트 코드
	@Test
    @DisplayName("상품명, 상품상세설명 or 테스트")
    public void findByItemNmOrItemDetailTest(){
        this.createItemList();
        List<Item> itemList = itemRepository.findByItemNmOrItemDetail("테스트 상품1", "테스트 상품 상세 설명5");
        for(Item item : itemList){
            System.out.println(item.toString());
        }
    }

2. LessThan 조건

// 인터페이스
List<Item> findByPriceLessThan(Integer price);

// 테스트 코드
@Test
    @DisplayName("가격 LessThan 테스트")
    public void findByPriceLessThanTest(){
        this.createItemList();
        List<Item> itemList = itemRepository.findByPriceLessThan(10005);
        for(Item item : itemList){
            System.out.println(item.toString());
        }
    }

3. 내림차순 정렬

  • 오름차순 정렬 : OrderBy + 속성명 + Asc` 를 이용하면 된다!
  • 내림차순 정렬 : OrderBy + 속성명 + Desc` 를 이용하면 된다!
// 인터페이스
List<Item> findByPriceLessThanOrderByPriceDesc(Integer price); // 내림차순

// 테스트 코드
    @Test
    @DisplayName("가격 내림차순 조회 테스트")
    public void findByPriceLessThanOrderByPriceDesc(){
        this.createItemList();
        List<Item> itemList = itemRepository.findByPriceLessThanOrderByPriceDesc(10005);
        for(Item item : itemList){
            System.out.println(item.toString());
        }
    }

0개의 댓글

관련 채용 정보