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
테이블에는 name
과 age
라는 컬럼이 있습니다.
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
절에서 데이터를 조회합니다. 그룹화하고 싶은 컬럼 name
을 groupBy
에 지정하고, 집계 함수인 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 공식 사이트를 참고해보세요.