[java] Querydsl을 사용하여 정렬 및 페이징 작업 수행하기

이번에는 Java에서 Querydsl을 사용하여 데이터베이스 조회 시 정렬 및 페이징 작업을 수행하는 방법을 알아보겠습니다.

1. Querydsl 의존성 추가하기

먼저, 프로젝트에 Querydsl의 의존성을 추가해야 합니다. Maven을 사용하는 경우 pom.xml 파일에 다음 의존성을 추가합니다.

<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>

Gradle을 사용하는 경우 build.gradle 파일에 다음 의존성을 추가합니다.

implementation 'com.querydsl:querydsl-core:4.4.0'
implementation 'com.querydsl:querydsl-jpa:4.4.0'

의존성을 추가한 후에는 프로젝트를 빌드해야 합니다.

2. Querydsl 사용하기

Querydsl을 사용하기 위해 먼저 QEntity 클래스를 생성해야 합니다. QEntity 클래스는 Querydsl에서 사용되는 Entity 클래스입니다. Entity 클래스와 같은 위치에 생성하며, 클래스 이름 뒤에 Q를 붙여 생성합니다. 예를 들어, User 클래스의 QEntity 클래스는 QUser가 됩니다.

2.1. 정렬 작업

정렬 작업을 위해 Querydsl의 OrderSpecifier를 사용합니다. OrderSpecifier는 정렬을 위한 조건을 지정하는 클래스로, asc() 또는 desc() 메서드로 오름차순 또는 내림차순을 지정할 수 있습니다.

import static com.querydsl.core.types.dsl.Expressions.*;

QUser qUser = QUser.user;

List<User> users = queryFactory
    .selectFrom(qUser)
    .orderBy(qUser.name.asc())
    .fetch();

위 예제에서는 name 필드를 기준으로 오름차순으로 정렬한 결과를 가져옵니다.

2.2. 페이징 작업

페이징 작업을 위해 Querydsl의 QueryModifiers를 사용합니다. QueryModifiers는 페이징 작업을 위한 조건을 지정하는 클래스로, limit() 메서드로 가져올 데이터의 수를 지정하고, offset() 메서드로 시작 인덱스를 지정합니다.

QUser qUser = QUser.user;

List<User> users = queryFactory
    .selectFrom(qUser)
    .orderBy(qUser.name.asc())
    .offset(10)
    .limit(10)
    .fetch();

위 예제에서는 name 필드를 기준으로 오름차순으로 정렬한 후, 10번째부터 10개의 데이터를 가져옵니다.

3. 결론

Querydsl을 사용하여 데이터베이스 조회 시 정렬 및 페이징 작업을 손쉽게 수행할 수 있습니다. Querydsl의 OrderSpecifierQueryModifiers 클래스를 이용하여 필요한 작업을 지정하면 됩니다. 이를 통해 코드를 간결하게 작성할 수 있고, 성능과 가독성을 개선할 수 있습니다.

4. 참고 자료