TIL

[TIL] 20240311 JPA Query dsl - JPAQueryFactory

yjyj0101 2024. 3. 11. 12:22

1. JPAQueryFactory

조인문이나 여러가지 복잡한 쿼리문을 작성할때도 있는데 이때 Querydsl을 사용하면 jpaQueryFactory 객체를 생성하여 쿼리문을 작성할 수 있음

  1. 문자가 아닌 코드로 쿼리를 작성함으로써, 컴파일 시점에 문법 오류를 쉽게 확인할 수 있다.
  2. 자동 완성 등 IDE의 도움을 받을 수 있다.
  3. 동적인 쿼리 작성이 편리하다.
  4. 쿼리 작성 시 제약 조건 등을 메서드 추출을 통해 재사용할 수 있다.

2. 사용방법

JPAQueryFactory 에 entityManager 를 주입해서 Bean 으로 등록 ->  Q클래스 생성 -> selectFrom(), select() 메서드 활용

 

- selectFrom()

SELECT 쿼리와 FROM 절을 결합한 단축 형태로, 조회할 엔티티의 타입이 명확할 때 사용됩니다. 이 메소드는 주로 엔티티 전체를 조회할 때 사용

QCustomer customer = QCustomer.customer;
List<Customer> result = queryFactory
    .selectFrom(customer)
    .where(customer.name.eq("John"))
    .fetch();

 

- select()

select() 메소드는 더 일반적이고 유연한 방식으로, 하나 이상의 특정 필드나 서브쿼리를 선택할 때 사용

특정 필드만 선택하거나, 여러 필드를 결합한 복합 선택, 집계 함수 등 복잡한 쿼리를 구성가능

QUser user = QUser.user;

List<String> userNames = queryFactory
    .select(user.name)
    .from(user)
    .where(user.age.gt(18))
    .fetch();

 

3. JPAQueryFactoryQueryDslPredicateExecutor의 차이

  • JPAQueryFactory는 복잡한 쿼리와 다양한 쿼리 옵션을 자유롭게 사용하고 싶을 때, 그리고 동적 쿼리의 유연성이 필요할 때 적합하다.
  • QueryDslPredicateExecutor는 Spring Data JPA와의 통합이 중요하고, 간단한 조건 쿼리를 빠르게 구현하고 싶을 때 유용하다.

출처 및 다양한 문법참조: 

https://dingdingmin-back-end-developer.tistory.com/entry/Spring-Data-JPA-8-Querydsl-%EC%82%AC%EC%9A%A9