이게 build.gradle에 있으면 된다.
public interface SpringDataJpaItemRepository extends JpaRepository<Item, Long> {
List<Item> findByItemNameLike(String itemName);
List<Item> findByPriceLessThanEqual(Integer price);
List<Item> findByItemNameLikeAndPriceLessThanEqual(String itemName, Integer price);
@Query("select i from Item i where i.itemName like :itemName and i.price <= :price")
List<Item> findItems(@Param("itemName")String itemName, @Param("price") Integer price);
}
조회만 해놓은 거긴 한데, (근데 아마 Insert이런건 이미 있을 듯?)
findByItemNameLike 는 이름이 비슷한, 그러니까 어느 한 쪽에 itemName이 들어간
findByPriceLessThanEqual 는 price보다 작거나 같은.
보통이제
행동 기준 조건
findBy itemName like
이런 식인 듯.
findByItemNameLikeAndPriceLessThanEqual
이렇게 긴 경우,
아래와 같이 쿼리를 직접 넣어줄 수도 있음.
findItems랑 똑같은 기능임. 걍 예시로 둘다 해본거.
@Query("select i from Item i where i.itemName like :itemName and i.price <= :price")
List<Item> findItems()
근데 여기서 중요한 거,
메서드 이름으로 자동으로 쿼리 만드는 것은 인자 순서를 바인딩 해야 할 순서에 잘 맞춰 줘야 함.
그래서 어떤 sql문이 나올 지 알아야 한다는 것의 이유 중 하나 인지도.
또, @Query해서 쿼리문 직접 작성할 때는
@Param(바인딩이름)
꼭 해줘야 함.
이거는 그럼 순서는 상관 없으려나? 챗GPT는 상관없다고 함.
그래도 맞춰주는게 유지보수상 더 좋겠지.
여튼 이제 어떤 jpql문이 작성되는지 정리해 보겠음
findAll 이거는 코드로 만들진 않았지만, 이미 상위에 만들어져 있어서 그냥 쓰면 됨.
select i from Item i
findByItemNameLike()
select i from Item i where i.itemName like ?
findByPriceLessThanEqual()
select i from Item i where i.price <= ?
findByItemNameLikeAndPriceLessThanEqual()
select i from Item i where i.itemName like ? and i.price <= ?
'스프링 > 6. 스프링 DB-2' 카테고리의 다른 글
33. Querydsl (0) | 2023.10.13 |
---|---|
32. 스프링데이터JPA 적용 2 (0) | 2023.10.12 |
30. 스프링DataJPA 주요 기능 (0) | 2023.10.12 |
29. 스프링 데이터 JPA 전체적인 기능 (0) | 2023.10.12 |
28. 스프링 데이터 JPA (0) | 2023.10.11 |