🧩 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와 함께 이해하면 좋다.

연결문서

댓글남기기