@Query 어노테이션을 이용하는데 단점이 있다.
@Query 어노테이션 JPQL문법 중 오타가 있거나 잘못 입력했을 경우 컴파일 시점에 에러가 발생
이러한 문제는 Querydsl이 도움을 준다.
JPQL을 코드로 작성할 수 있도록 도와주는 빌더 API
소스 작성 시 오타가 발생하면 개발자에게 오타가 있음을 바로 알려준다.
동적으로 쿼리를 생성 <---가장 큰 장점
문자를 계속 더해야 한다 <-------단점
고정된 SQL문이 아닌 조건에 맞게 동적으로 쿼리 생성 가능
비슷한 쿼리 재사용할 수 있으며, 제약 조건 조립 및 가독성 향상
문자열이 아닌 자바 소스코드로 작성하기 때문에, 컴파일 시점에 오류를 발견 가능
IDE의 도움을 받아서 자동 완성 기능 이용할 수 있기 때문에 생산성 향상
pom.xml파일 의존성 추가
<dependency>
<groupId>com.querydsl</groupId>
<artifactId>querydsl-jpa</artifactId>
<version>4.3.1</version>
</dependency>
<dependency>
<groupId>com.querydsl</groupId>
<artifactId>querydsl-apt</artifactId>
<version>4.3.1</version>
</dependency>
자바 코드를 생성하는 Qdomain 플러그인 추가
Qdomain?
엔티티를 기반으로 접두사로 'Q'가 붙는 클래스들을 자동으로 생성해주는 플러그인
Querydsl을 통해 쿼리르 생성할 때 Qdomain 객체를 사용
<plugin>
<groupId>com.mysema.maven</groupId>
<artifactId>apt-maven-plugin</artifactId>
<version>1.1.3</version>
<executions>
<execution>
<goals>
<goal>process</goal>
</goals>
<configuration>
<outputDirectory>target/generated-sources/java</outputDirectory> <processor>com.querydsl.apt.jpa.JPAAnnotationProcessor</processor>
</configuration>
</execution>
</executions>
</plugin>
버전 차이로 오류가 난다면?
여기를 참고한다
List< T > fetch()
조회 결과 리스트 반환
T fetchOne
조회 대상이 1건인 제너릭으로 지정한 타입 반환
T fetchFirst()
조회 대상 중 1건만 반환
Long fetchCount()
조회 대상 개수 반환
QueryResult< T > fetchResults()
조회한 리스트와 전체 개수를 포함한 QueryResults 반환
: 이 조건이 맞다고 판단하는 근거를 함수로 제공하는 것
Repository에 predicate를 파라미터로 전달하기 위해 QueryDslPrediateExecutor 인터페이스를 상속받아야한다.
long count(predicate)
조건에 맞는 데이터의 총 개수 반환
boolean exists(predicate)
조건에 맞는 데이터 존재 여부 반환
Iterable findAll(predicate)
조건에 맞는 모든 데이터 반환
Page< T > findAll(predicate,Pageable)
조건에 맞는 페이지 데이터 반환
Iterable findAll(predicate)
조건에 맞는 정렬된 데이터 반환
T findOne(predicate)
조건에 맞는 데이터 1개 반환