Repository 인터페이스에 간단한 네이밍 룰을 이용해 메서드를 작성해서 원하는 쿼리를 실행할 수 있다
[ 규칙 ]
find + (엔티티 이름) + By + 변수이름
public interface ItemRepository extends JpaRepository<Item, Long> {
List<Item> findByItemNm(String itemNm);
// 아이템 리스트 만드는 메서드
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]
// 인터페이스
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());
}
}
// 인터페이스
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());
}
}
오름차순 정렬
: 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());
}
}