Querydsl
🧩 Querydsl
정의
Querydsl은 자바 코드로 타입 안전한 쿼리를 작성할 수 있게 해주는 Query Framework이다. 엔티티와 속성을 기준으로 쿼리를 구성하므로, 문자열 JPQL보다 안정적으로 사용할 수 있다.
Querydsl은 컴파일 시점에 오류를 확인할 수 있고, IDE 자동완성도 잘 활용할 수 있다.
🧩 역할
- 타입 안전한 쿼리 작성
- 동적 조건 처리
- 복잡한 조회 로직 분리
- JPQL, 서브쿼리, 정렬, 페이징 처리
🛠 특징
- 자바 코드로 쿼리를 작성한다
- 엔티티와 필드를 기준으로 조회한다
- 동적 조건을 깔끔하게 조합할 수 있다
BooleanExpression,BooleanBuilder,OrderSpecifier,JPAExpressions같은 도구와 함께 사용한다
🛠 자주 쓰는 메서드
fetch
| 메서드 | 설명 |
|---|---|
fetch() |
조회 결과 목록을 반환한다 |
fetchOne() |
단건 조회 결과를 반환한다 |
fetchFirst() |
첫 번째 결과를 반환한다 |
fetchCount() |
개수를 반환한다 |
where
| 메서드 | 설명 |
|---|---|
eq() |
같다 |
ne() |
다르다 |
in() |
포함 여부를 확인한다 |
between() |
범위 조건을 만든다 |
contains() |
포함 문자열 조건을 만든다 |
startsWith() |
시작 문자열 조건을 만든다 |
endsWith() |
끝 문자열 조건을 만든다 |
🛠 사용 예시
String productName = "myProduct";
List<Product> result = queryFactory
.selectFrom(product)
.where(
product.name.eq(productName),
product.price.eq("1000")
)
.fetch();
동적 조건 예시
List<User> result = queryFactory
.selectFrom(user)
.where(
hasName(name),
isActive(active)
)
.fetch();
🛠 설정 포인트
JPAQueryFactory를 통해 쿼리 객체를 생성한다EntityManager가 필요하다- Querydsl APT 설정으로 Q타입을 생성한다
- 생성된 Q타입을 통해 타입 안전성을 확보한다
⚠️ 주의사항
- Querydsl은 JPA 표준이 아니라 별도 라이브러리다.
- 동적 조건이 복잡할수록
BooleanBuilder와 같은 보조 도구가 필요할 수 있다. - 문자열 JPQL보다 안전하지만, DB 함수나 특수 쿼리는 별도 검토가 필요하다.
- 생성된 Q타입은 빌드 과정에 따라 갱신해야 한다.
📌 정리
- Querydsl은 자바 코드로 타입 안전한 쿼리를 작성하는 도구다.
- 동적 검색, 정렬, 서브쿼리, 복잡한 조건 처리에 유용하다.
BooleanExpression,BooleanBuilder,OrderSpecifier,JPAExpressions와 함께 이해하면 좋다.
댓글남기기