[java] Querydsl을 사용하여 그룹화 및 집계 작업 수행하기

Querydsl은 Java 언어로 작성된 동적 쿼리 생성 라이브러리입니다. 이를 사용하면 SQL과 유사한 쿼리를 작성하고 실행할 수 있습니다. 이번 포스트에서는 Querydsl을 사용하여 그룹화 및 집계 작업을 수행하는 방법에 대해 알아보겠습니다.

1. Querydsl 설정

먼저 Querydsl을 사용하기 위해 Maven 또는 Gradle 프로젝트에 Querydsl 의존성을 추가해야 합니다. 이를 위해 build.gradle 파일에 다음과 같이 의존성을 추가합니다.

dependencies {
    // Querydsl 의존성 추가
    implementation 'com.querydsl:querydsl-core:4.4.0'
    implementation 'com.querydsl:querydsl-apt:4.4.0'
}

의존성을 추가한 후, 프로젝트를 빌드합니다. Querydsl을 사용하기 위해 Q 클래스를 생성해야 하는데, 이를 위해 프로젝트를 빌드하면 자동으로 Q 클래스를 생성해주는 APT(Annotation Processing Tool)가 동작합니다.

2. Querydsl을 사용하여 그룹화 및 집계 작업 수행하기

다음은 샘플 데이터베이스 테이블과 데이터를 가정한 예시입니다. User 테이블에는 nameage라는 컬럼이 있습니다.

CREATE TABLE user (
    id INT PRIMARY KEY,
    name VARCHAR(255),
    age INT
);

INSERT INTO user (id, name, age)
VALUES (1, 'Alice', 25);

INSERT INTO user (id, name, age)
VALUES (2, 'Bob', 30);

INSERT INTO user (id, name, age)
VALUES (3, 'Alice', 35);

INSERT INTO user (id, name, age)
VALUES (4, 'Bob', 28);

Querydsl을 사용하여 name 컬럼으로 그룹화하고 age 컬럼의 평균을 계산하는 작업을 해보겠습니다.

import com.querydsl.core.Tuple;
import com.querydsl.jpa.impl.JPAQueryFactory;

import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;

...

@PersistenceContext
private EntityManager entityManager;

public List<Tuple> getAverageAgeByName() {
    JPAQueryFactory queryFactory = new JPAQueryFactory(entityManager);
    QUser qUser = QUser.user;

    return queryFactory
        .from(qUser)
        .groupBy(qUser.name)
        .select(qUser.name, qUser.age.avg())
        .fetch();
}

위 코드에서 JPAQueryFactory 객체를 생성하고, QUser 클래스를 사용하여 from 절에서 데이터를 조회합니다. 그룹화하고 싶은 컬럼 namegroupBy에 지정하고, 집계 함수인 avg()를 사용하여 age 컬럼의 평균을 계산합니다. 최종적으로 select 절에서 그룹화한 컬럼과 집계 함수를 선택합니다.

이제 위 메서드를 호출하면 name별로 age의 평균 값이 반환됩니다.

3. 실행 결과

getAverageAgeByName 메서드를 실행한 결과는 다음과 같습니다.

[(Alice, 30.0), (Bob, 29.0)]

이 결과는 name이 ‘Alice’인 사용자들의 age의 평균은 30, ‘Bob’인 사용자들의 age의 평균은 29이라는 것을 나타냅니다.

이처럼 Querydsl을 사용하여 쿼리를 작성하고 그룹화 및 집계 작업을 수행할 수 있습니다.

결론

이번 포스트에서는 Querydsl을 사용하여 그룹화 및 집계 작업을 수행하는 방법에 대해 알아보았습니다. Querydsl을 사용하면 자바 코드로 간편하게 SQL 쿼리를 작성하고 실행할 수 있습니다. 추가로 Querydsl을 사용하는 방법에 대해 더 알아보고 싶다면 Querydsl 공식 사이트를 참고해보세요.