1. JPAQueryFactory
조인문이나 여러가지 복잡한 쿼리문을 작성할때도 있는데 이때 Querydsl을 사용하면 jpaQueryFactory 객체를 생성하여 쿼리문을 작성할 수 있음
- 문자가 아닌 코드로 쿼리를 작성함으로써, 컴파일 시점에 문법 오류를 쉽게 확인할 수 있다.
- 자동 완성 등 IDE의 도움을 받을 수 있다.
- 동적인 쿼리 작성이 편리하다.
- 쿼리 작성 시 제약 조건 등을 메서드 추출을 통해 재사용할 수 있다.
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. JPAQueryFactory와 QueryDslPredicateExecutor의 차이
- JPAQueryFactory는 복잡한 쿼리와 다양한 쿼리 옵션을 자유롭게 사용하고 싶을 때, 그리고 동적 쿼리의 유연성이 필요할 때 적합하다.
- QueryDslPredicateExecutor는 Spring Data JPA와의 통합이 중요하고, 간단한 조건 쿼리를 빠르게 구현하고 싶을 때 유용하다.
출처 및 다양한 문법참조:
'TIL' 카테고리의 다른 글
[TIL] 20240314 Spring project 최적화 (0) | 2024.03.14 |
---|---|
[TIL] 20240313 Propagation / Isolation (0) | 2024.03.13 |
[TIL] 20240308 JPA Query dsl - QuerydslPredicateExecutor (2) | 2024.03.08 |
[TIL] 20240306 JPA N+1 문제 (0) | 2024.03.06 |
[TIL] 20240305 JPA 페이징 기능 (0) | 2024.03.05 |