🧩 Querydsl Expression

정의

ExpressionQuerydsl에서 select, from, where 절에 사용되는 표현식의 기본 타입이다. 쿼리의 조건, 정렬, 결과 값을 객체로 다루기 위한 기반이 된다.

Querydsl은 이 표현식들을 조합해 타입 안전한 쿼리를 구성한다.

🧩 역할

  • 쿼리의 조건과 결과를 표현한다
  • 타입별 표현식을 제공한다
  • Querydsl의 조합 가능한 쿼리 구조를 만든다
  • 동적 쿼리를 표현식 단위로 분리할 수 있게 한다

🧩 구조

image

🧩 종류

타입 기능
NumberExpression 숫자 데이터 타입 표현식
StringExpression 문자열 데이터 타입 표현식
BooleanExpression 참/거짓 조건 표현식
ComparableExpression 비교 가능한 타입 표현식
DateTimeExpression 날짜/시간 타입 표현식
EntityPath 엔티티 타입 표현식

🛠 사용 예시

List<FileLink> result = queryFactory
        .selectFrom(qFileLink)
        .where(
                Expressions.stringTemplate(
                        "TO_DATE({0}, 'YYYY-MM-DD HH24MISS')",
                        Expressions.stringTemplate("CONCAT({0}, '235959')", qFileLink.useExpiryDate)
                ).loe(DateTime.now().toString("YYYY-MM-DD HH24MISS"))
        )
        .fetch();

BooleanExpression과 연결

public BooleanExpression isActive(Boolean active) {
    return active != null ? qUser.active.eq(active) : null;
}

🧩 특징

  • 텍스트가 아니라 객체로 쿼리 요소를 다룬다
  • 타입별로 표현식이 분리되어 있다
  • Expressions와 함께 자주 사용된다
  • 서브쿼리, 조건식, 템플릿 표현식에 활용된다

⚠️ 주의사항

  • Expression 계열은 Querydsl 전용 개념이다.
  • 타입 이름은 대문자 시작의 표준 클래스명을 사용하는 것이 맞다.
  • 템플릿 표현식은 DB 함수와 결합되므로 문법을 신중히 작성해야 한다.
  • 단순 조건은 별도 메서드로 분리하면 재사용성이 좋아진다.

📌 정리

  • Querydsl Expression은 쿼리를 객체로 표현하는 기반 타입이다.
  • 타입별 표현식과 템플릿 표현식을 조합해 복잡한 쿼리를 만든다.
  • Expressions, BooleanExpression, OrderSpecifier와 함께 보면 이해가 쉽다.

연결문서

댓글남기기