[java] Java Querydsl을 사용하여 집계 함수 쿼리 작성하기

Querydsl은 Java에서 사용할 수 있는 SQL 쿼리 빌더 라이브러리입니다. 이를 사용하면 Java 코드로 직접 SQL 쿼리를 작성할 필요 없이, 유연하고 안전한 방식으로 쿼리를 작성할 수 있습니다.

이번 포스트에서는 Java Querydsl을 사용하여 집계 함수 쿼리를 작성하는 방법을 알아보겠습니다.

1. Querydsl 설정하기

Querydsl을 시작하기 위해 먼저 Maven 또는 Gradle을 통해 Querydsl 의존성을 추가해야 합니다. 아래는 Maven을 사용하는 경우의 의존성 설정 예시입니다.

<dependency>
    <groupId>com.querydsl</groupId>
    <artifactId>querydsl-core</artifactId>
    <version>4.4.0</version>
</dependency>
<dependency>
    <groupId>com.querydsl</groupId>
    <artifactId>querydsl-jpa</artifactId>
    <version>4.4.0</version>
</dependency>

2. Querydsl Predicate 생성하기

Querydsl을 사용하기 위해 먼저 Querydsl Predicate 객체를 생성해야 합니다. Predicate는 쿼리의 조건을 정의하는 객체입니다.

import com.querydsl.core.types.Predicate;
import com.querydsl.core.types.dsl.Expressions;
import com.querydsl.jpa.impl.JPAQueryFactory;

public class QuerydslUtils {

    private JPAQueryFactory queryFactory;

    public QuerydslUtils(EntityManager entityManager) {
        this.queryFactory = new JPAQueryFactory(entityManager);
    }

    public Predicate getCountByCondition(BooleanExpression condition) {
        return queryFactory
                .select(Expressions.numberTemplate(Long.class, "count(1)"))
                .from(entity)
                .where(condition)
                .fetchOne();
    }
}

3. 집계 함수 쿼리 작성하기

이제 Querydsl을 사용하여 집계 함수 쿼리를 작성할 수 있습니다. 아래는 주어진 조건에 해당하는 엔티티의 개수를 가져오는 예시입니다.

import com.querydsl.core.types.dsl.BooleanExpression;

public class ExampleService {

    private EntityManager entityManager;
    private QuerydslUtils querydslUtils;

    public long getCountByCondition(BooleanExpression condition) {
        BooleanExpression whereCondition = entity.isActive.isTrue().and(condition);
        return querydslUtils.getCountByCondition(whereCondition);
    }
}

마무리

이렇게 Java Querydsl을 사용하여 집계 함수 쿼리를 작성하는 방법을 알아보았습니다. Querydsl을 사용하면 보다 간편하고 안전한 방식으로 쿼리를 작성할 수 있으며, 코드 가독성을 높일 수 있습니다.

더 많은 Querydsl의 사용 방법은 Querydsl 공식 문서를 참고하시기 바랍니다.

참고 자료: