Spring DATA JPA Querydsl

SEOP·2023년 4월 26일
0

@Query 어노테이션을 이용하는데 단점이 있다.
@Query 어노테이션 JPQL문법 중 오타가 있거나 잘못 입력했을 경우 컴파일 시점에 에러가 발생
이러한 문제는 Querydsl이 도움을 준다.

Querydsl

JPQL을 코드로 작성할 수 있도록 도와주는 빌더 API
소스 작성 시 오타가 발생하면 개발자에게 오타가 있음을 바로 알려준다.

동적으로 쿼리를 생성 <---가장 큰 장점
문자를 계속 더해야 한다 <-------단점

Querydsl 장점

고정된 SQL문이 아닌 조건에 맞게 동적으로 쿼리 생성 가능
비슷한 쿼리 재사용할 수 있으며, 제약 조건 조립 및 가독성 향상
문자열이 아닌 자바 소스코드로 작성하기 때문에, 컴파일 시점에 오류를 발견 가능
IDE의 도움을 받아서 자동 완성 기능 이용할 수 있기 때문에 생산성 향상

Querydsl 사용하기

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>

버전 차이로 오류가 난다면?
여기를 참고한다

JPAQuery 데이터 반환 메소드

List< T > fetch()
조회 결과 리스트 반환
T fetchOne
조회 대상이 1건인 제너릭으로 지정한 타입 반환
T fetchFirst()
조회 대상 중 1건만 반환
Long fetchCount()
조회 대상 개수 반환
QueryResult< T > fetchResults()
조회한 리스트와 전체 개수를 포함한 QueryResults 반환

Predicate란?

: 이 조건이 맞다고 판단하는 근거를 함수로 제공하는 것
Repository에 predicate를 파라미터로 전달하기 위해 QueryDslPrediateExecutor 인터페이스를 상속받아야한다.

QueryDslPredicateExecutor 인터페이스 정의 메소드

long count(predicate)
조건에 맞는 데이터의 총 개수 반환

boolean exists(predicate)
조건에 맞는 데이터 존재 여부 반환

Iterable findAll(predicate)
조건에 맞는 모든 데이터 반환

Page< T > findAll(predicate,Pageable)
조건에 맞는 페이지 데이터 반환

Iterable findAll(predicate)
조건에 맞는 정렬된 데이터 반환

T findOne(predicate)
조건에 맞는 데이터 1개 반환

profile
응애 나 애기 개발자

0개의 댓글