QueryDSL : Boolean

이진욱·2025년 1월 2일

이론

목록 보기
22/24

BooleanExpression

BooleanExpression은 Java나 Spring과 같은 환경에서 주로 사용하는 Boolean 값을 반환하는 논리 표현식을 의미합니다. 이는 논리적인 조건을 표현하거나 필터링에 사용되며, 특히 Querydsl 라이브러리에서 많이 사용됩니다.

Querydsl에서의 BooleanExpression

Querydsl은 타입-안전하고 동적 SQL 쿼리를 작성하기 위한 도구로, BooleanExpression은 쿼리의 조건을 표현하는 데 사용됩니다.

주요 특징

  • 타입 안전: 쿼리를 작성할 때 컴파일 타임에 오류를 발견할 수 있습니다.

  • 체이닝 가능: 여러 조건을 결합하여 복잡한 논리 표현을 작성할 수 있습니다.

  • 동적 쿼리 지원: 조건이 필요에 따라 추가되거나 제거될 수 있습니다.

  • 주요 메서드
    BooleanExpression은 다양한 메서드를 제공하여 논리적 조건을 쉽게 작성할 수 있습니다. 대표적인 메서드는 다음과 같습니다.

and(): 조건을 AND로 결합
or(): 조건을 OR로 결합
not(): 조건을 NOT으로 반전

사용 예제

// Q 클래스는 Querydsl에서 생성된 엔티티 클래스입니다.
QUser user = QUser.user;

// 특정 조건 생성
BooleanExpression isAdult = user.age.goe(18);
BooleanExpression isFromSeoul = user.city.eq("Seoul");

// 조건 결합
BooleanExpression condition = isAdult.and(isFromSeoul);

// 결합된 조건을 쿼리에 적용
List<User> result = queryFactory
    .selectFrom(user)
    .where(condition)
    .fetch();

날짜 조건 사용

특정 기간 동안 가입한 사용자를 필터링하는 예제입니다.



QUser user = QUser.user;

// 날짜 조건 생성
LocalDate startDate = LocalDate.of(2024, 1, 1);
LocalDate endDate = LocalDate.of(2024, 12, 31);

BooleanExpression condition = user.createdDate.between(startDate, endDate);

// 쿼리 실행
List<User> users = queryFactory
    .selectFrom(user)
    .where(condition)
    .fetch();
    
잘못된 사용: boolean 타입 사용

아래와 같이 단순 boolean 값으로 조건을 작성하면 컴파일 에러가 발생합니다.

boolean isAdult = true; // 단순 boolean 값
BooleanExpression condition = user.age.goe(18).and(isAdult); // 컴파일 에러 발생

오류 이유: and 메서드는 BooleanExpression 타입을 받아야 하는데, boolean 타입을 제공했기 때문입니다.

boolean

Java 기본 데이터 타입으로, 논리값(true 또는 false)을 나타냅니다.
역할: 프로그램 내에서 단순히 논리적 참/거짓을 표현하고 조건문(if, while 등)에서 사용됩니다.

  • 타입: Java의 원시 데이터 타입.
  • 주요 특징:
    • 단순 논리값: true 또는 false로 고정.
    • 즉시 실행: 조건문에서 바로 평가되어 실행 흐름을 결정.

boolean isAdult = true;
boolean isVip = false;

if (isAdult && isVip) {
System.out.println("This user is an adult and a VIP.");
}

BooleanBuilder

BooleanBuilder는 Querydsl에서 제공하는 동적 조건 생성 도구입니다.

  • 기능: 조건을 동적으로 추가하거나 수정할 수 있습니다.

  • 특징:

    • Mutable (가변): 조건을 단계적으로 추가하거나 변경 가능.
    • 복잡한 동적 조건 생성에 적합.
BooleanBuilder 사용 예제
QUser user = QUser.user;

// 동적 조건 생성
BooleanBuilder builder = new BooleanBuilder();

// 조건 추가
builder.and(user.age.goe(18)); // 나이가 18 이상
builder.and(user.isVip.isTrue()); // VIP인 조건

// 동적 조건
boolean includeInactiveUsers = false;
if (includeInactiveUsers) {
    builder.or(user.isActive.isFalse()); // 비활성 사용자도 포함
}

// 쿼리 실행
List<User> users = queryFactory
    .selectFrom(user)
    .where(builder)
    .fetch();
차이점

profile
열심히 하는 신입 개발자

0개의 댓글