[java] Querydsl을 사용하여 동적 쿼리 작성하기

Querydsl은 대부분의 ORM(Object-Relational Mapping) 프레임워크와 호환되는 자바 기반의 동적 쿼리 작성을 지원하는 도구입니다. 이를 통해 SQL을 작성하는 대신 타입 안정성과 코드 중심의 쿼리 작성 경험을 얻을 수 있습니다.

이번 포스트에서는 Querydsl을 사용하여 동적 쿼리를 작성하는 방법에 대해 알아보겠습니다.

1. Querydsl 의존성 추가하기

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>
    <scope>provided</scope>
</dependency>

Gradle을 사용하는 경우 다음과 같이 의존성을 추가합니다.

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

2. Querydsl 사용하기

Querydsl을 사용하기 위해서는 먼저 엔티티 클래스와 Q클래스를 생성해야 합니다. 엔티티 클래스는 ORM 프레임워크를 사용하여 데이터베이스와 매핑되는 클래스이고, Q클래스는 Querydsl에서 사용하는 쿼리를 위한 클래스입니다. 이때 Q클래스는 자동으로 코드 생성되므로 직접 작성할 필요가 없습니다.

예를 들어, 다음은 Person 엔티티 클래스와 QPerson Q클래스의 예입니다.

@Entity
@Table(name = "person")
public class Person {
    
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    private String name;

    private int age;

    // getters and setters
    // ...
}

public class QPerson extends EntityPathBase<Person> {

    public static final QPerson person = new QPerson("person");

    public final NumberPath<Long> id = createNumber("id", Long.class);

    public final StringPath name = createString("name");

    public final NumberPath<Integer> age = createNumber("age", Integer.class);

    // constructors
    // ...
}

위의 예시에서 QPerson 클래스는 QPerson.person으로 정의되어 있습니다.

3. 동적 쿼리 작성하기

이제 Querydsl을 사용하여 동적 쿼리를 작성할 수 있습니다. 다음은 간단한 예시입니다.

QPerson person = QPerson.person;
JPAQueryFactory queryFactory = new JPAQueryFactory(entityManager);

String name = "John";
int age = 25;

List<Person> result = queryFactory.selectFrom(person)
    .where(person.name.eq(name)
        .and(person.age.goe(age)))
    .fetch();

위의 예시에서는 Person 엔티티에서 name이 “John”이고 age가 25 이상인 데이터를 조회하는 쿼리입니다.

위와 같이 Querydsl을 사용하면 동적 쿼리를 편리하게 작성할 수 있으며, 타입 안정성과 코드 중심의 접근 방식을 제공합니다.

결론

Querydsl을 사용하여 동적 쿼리를 작성하는 방법에 대해 알아보았습니다. Querydsl은 타입 안정성과 코드 중심의 쿼리 작성 경험을 제공하며, 간편하게 동적 쿼리를 작성할 수 있습니다. Querydsl을 사용하면 데이터베이스와의 상호작용이 더욱 편리해지며, 개발자는 가독성 있는 코드를 작성할 수 있습니다.

더 많은 정보를 원하시면 Querydsl 공식 문서를 참조하시기 바랍니다.