쿼리DSL : 타입 안정성 있게 쿼리를 작성하여, 복잡한 동적 쿼리를 사용할 수 있는 프레임워크
- 타입 안전성: 쿼리 문자열을 사용하지 않고, 자바 코드 기반으로 쿼리를 작성하여 컴파일 시에 타입 오류를 잡을 수 있습니다.
- 동적 쿼리 작성: QueryDSL을 사용하면 BooleanBuilder와 Predicate 를 이용하여 여러 조건을 동적으로 조합하고, 필요한 경우에만 조건을 추가할 수 있습니다.
- Q 클래스 사용: QueryDSL은 각 엔티티에 대해 자동으로 Q 클래스를 생성하여, 엔티티의 필드에 쉽게 접근할 수 있게 해줍니다.
동적 쿼리 사용 방법
- BooleanBuilder는 동적으로 조건을 추가할 수 있어서, 복잡한 쿼리를 작성할 때 유용합니다. 여러 조건을 and()나 or() 쿼리문을 사용해서 논리적으로 조합하는 데 사용됩니다.
- Predicate는 개별 조건을 표현하는 기본 타입으로, BooleanExpression을 통해 사용되며, where() 절에 직접 넣을 수 있는 조건을 나타냅니다.
두 개념 모두 동적 쿼리 작성에 자주 사용되며, BooleanBuilder는 조건이 많고 복잡할 때, Predicate는 간단한 조건을 조합할 때 유용합니다.
- BooleanBuilder, Predicate 이거 있는 것은 아는데, 저는 Predicate 의 BooleanExpression 써서 구현했습니다.
쿼리 DSL 기본 설정 방법
그래들에 의존성 추가하면, Q클래스가 자동으로 빌드 디렉토리 안에 생성됩니다.
해당 Q클래스를 사용해서, 쿼리DSL에서 엔티티처럼 사용할 수 있습니다
왜 Q클래스 쓰는지? : 엔티티의 필드를 정의?
BooleanBuilder
jpa query factory
왜 사용하냐 : 복잡한 쿼리를 사용할 수 있고, 컴파일러 단계에서 문제를 찾을 수 있기 때문. 보통 JPA 매서드는 컴파일러에서 오류를 찾을 수 없습니다.
일반적인 db는 다 끝나고 알 수 있는데
Q클래스는 복사본이고
컴파일단계에서 이미 실행하지 않아도 알 수 있는 것!!
현중 질문1 : BooleanExpression 메서드들 아는 거 있냐?
contain, gt, lt, desc
equal, startWith? 도 있다
질문2 : Q클래스 알아요?
난 모름 그래서 현중님도 안알려줌