스프링/6. 스프링 DB-2

31. 스프링DataJpa 적용1

sdafdq 2023. 10. 12. 07:42
implementation 'org.springframework.boot:spring-boot-starter-data-jpa'

이게 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