Spring Data JPA에서 제공하는 @Query 어노테이션을 이용하면 SQL과 유사한 JPQL이라는 객체지향 쿼리 언어를 통해 복합한 쿼리도 처리가 가능하다.

Query 어노테이션 안에 JPQL로 작성한 쿼리문을 넣어줍니다. from 뒤에는 엔티티 클래스로 작성한 Item을 지정해주고, Item으로부터 데이터를 select 하겠다는 것을 의미합니다.

테스트 코드 실행 결과 상품 상세 설명에 '테스트 상품 상세 설명'을 포함하고 있는 상품 데이터 10개가 가격이 높은 순부터 조회되는 것을 확인할 수 있습니다.

Queyrydsl은 JPQL을 코드로 작성할 수 있도록 도와주는 빌더 API입니다. 소스 작성시 오타가 발생하면 개발자에게 오타가 있음을 바로 알려줍니다.
•고정된 SQL문이 아닌 조건에 맞게 동적으로 쿼리를 생성할 수 있다.
•비슷한 쿼리를 재사용할 수 있으며 제약 조건 조립 및 가독성을 향상시킬 수 있다.
•문자열이 아닌 자바 소스코드로 작성하기 때문에 컴파일 시점에 오류를 발견할 수 있다.
•IDE의 도움을 받아서 자동완성 기능을 이용할 수 있기에 생산성을 향상시킬 수 있다.
Querydsl을 사용하기 위해서는 몇가지 설정을 추가해야합니다. pom.xml 파일에 다음의 의존성을 추가합니다.

<교제에 있던 내용의 버전은 20년도 버전이라 신규 버전으로 변경되었습니다.>
다음으로 pom.xml에 Qdomain이라는 자바 코드를 생성하는 플러그인을 추가합니다. 엔티티를 기반으로 접두사(prefix)로 'Q'가 붙는 클래스들을 자동으로 생성해주는 플러그인 입니다.

<버전 호완성 문제로 최신버전으로 검색하여 수정하였습니다.>
Maven -> Reload All Maven Projects 버튼 클릭 -> complile(클릭)

target/generated-sources 폴더에 QItem 클래스가 생성됨을 확인

•영속성 컨텍스트를 사용하기 위해 @PersistenceContext 어노테이션을 이용해 EntityManager 빈을 주입
•JPAQueryFactory를 이용하여 쿼리를 동적으로 생성
•Querydsl을 통해 쿼리를 생성하기 우해 플러그인을 통해 자동으로 생성된 QItem 객체 이용

쿼리를 실행해보면 JPAQuery에 추가한 판매상태 코드와 상품 상세 설명이 where 조건에 추가돼 있고, 상품의 가경이 내림차순으로 정렬돼 데이터를 조회합니다.
다음은 QuerydslPredicateExecutor 를 이용한 상품 조회 예제입니다. Predicate란 '이 조건이 맞다'고 판단하는 근거를 함수로 제공하는 것입니다.


실행결과

다음은 Thymeleaf에 대해서 공부하고 직접 실행해보는 시간을 가져보도록 하겠습니당.