728x90
@Query 어노테이션
Spring Data JPA에서 제공하는 @Query 어노테이션을 이용하면 SQL과 유사한 JPQL(Java Persistence Query Language)라는 객체지향 쿼리 언어를 통해 복잡한 쿼리도 처리가 가능하다.
SQL문법와 유사하여 기존 SQL 사용자들 역시 쉽게 배울 수 있다.
SQL과 차이점
SQL의 경우 데이터 베이스의 테이블 대상으로 쿼리 수행.
JPQL은 앤티티 객체를 대상으로 쿼리를 수행
테이블이 아닌 객체를 대상으로 검색하는 객체지향 쿼리
JPQL은 SQL을 추상화 해서 사용하기 때문에, 특정 SQL에 의존하지 않는다.
JPQL로 작성됐다면 데이터베이스가 변경되어도 애플리케이션이 영향을 받지 않는다.
@Query를 이용한 검색 처리 예제
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param;
public interface ItemRepository extends JpaRepository<Item, Long> {
@Query("select i from Item i where i.itemDetail like " +
"%:itemDetail% order by i.price desc")
List<Item> findByItemDetail(@Param("itemDetail") String itemDetail);
}
테스트 코드
@SpringBootTest
@TestPropertySource(locations="classpath:application-test.properties")
class ItemRepositoryTest {
@Test
@DisplayName("@Query를 이용한 상품 조회 테스트")
public void findByItemDetailTest(){
this.createItemList();
List<Item> itemList = itemRepository.findByItemDetail("테스트 상품 상세 설명");
for(Item item : itemList){
System.out.println(item.toString());
}
}
}
@Query - nativeQuery
기존의 데이터베이스에서 사용하던 쿼리를 그대로 사용해야 할 때는 @Query의 nativeQuery 속성을 사용하면 기존 쿼리를 그대로 활용할 수 있다.
하지만 데이터베스에 종속되어 독립적이라는 장점을 잃는다.
@Query - nativeQuery 예제
public interface ItemRepository extends JpaRepository<Item, Long> {
@Query(value="select * from item i where i.item_detail like " +
"%:itemDetail% order by i.price desc", nativeQuery = true)
List<Item> findByItemDetailByNative(@Param("itemDetail") String itemDetail);
}
1. value안에 네이티브 쿼리 작성
2. "nativeQuery=true"를 지정
테스트코드
@SpringBootTest
@TestPropertySource(locations="classpath:application-test.properties")
class ItemRepositoryTest {
@Test
@DisplayName("nativeQuery 속성을 이용한 상품 조회 테스트")
public void findByItemDetailByNative(){
this.createItemList();
List<Item> itemList=
itemRepository.findByItemDetailByNative("테스트 상품 상세 설명");
for(Item item : itemList){
System.out.println(item.toString());
}
}
}
테스트 결과
반응형
'프로젝트 > Archive' 카테고리의 다른 글
[스프링 부트 쇼핑몰 프로젝트 with jpa] Thymeleaf 소개 (0) | 2022.10.06 |
---|---|
[스프링 부트 쇼핑몰 프로젝트 with jpa] Spring DATA JPA Querydsl (0) | 2022.10.04 |
[스프링 부트 쇼핑몰 프로젝트 with jpa] 쿼리메소드 (0) | 2022.09.20 |
[스프링 부트 쇼핑몰 프로젝트 with jpa] Repository 설계 (0) | 2022.09.20 |
[스프링 부트 쇼핑몰 프로젝트 with jpa] 상품 엔티티 설계 (0) | 2022.09.18 |