[java] Java Querydsl을 사용하여 특정 항목에 대한 조건 필터링하기

Querydsl은 자바를 위한 유연하고 강력한 쿼리 빌더 프레임워크입니다. 이를 사용하여 SQL 쿼리를 작성하는 대신 Java 코드로 쿼리를 구성할 수 있습니다. 이번 글에서는 Querydsl을 사용하여 특정 항목에 대한 조건 필터링을 하는 방법에 대해 알아보겠습니다.

1. Querydsl 설정과 의존성 추가

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

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

의존성을 추가한 뒤에는 적절한 설정을 해주어야 합니다. Spring Boot를 사용하는 경우 application.properties 파일에 다음과 같은 설정을 추가합니다:

# Querydsl 설정
spring.jpa.properties.jadira.usertype.autoRegisterUserTypes=true
spring.jpa.properties.hibernate.physical_naming_strategy=org.springframework.boot.orm.jpa.hibernate.SpringPhysicalNamingStrategy

2. Querydsl을 사용하여 조건 필터링하기

Querydsl을 사용하여 특정 항목에 대한 조건 필터링을 하려면 다음과 같은 단계를 따릅니다:

2.1. 엔티티 클래스와 Q클래스 생성

Querydsl을 사용하기 위해 엔티티 클래스와 Q클래스를 생성해야 합니다. Q클래스는 컴파일 시점에 생성되며 엔티티 클래스의 필드와 속성을 나타냅니다. Q클래스는 다음과 같이 생성할 수 있습니다:

package com.example.model;

import com.querydsl.core.annotations.QueryEntity;
import com.querydsl.core.annotations.QuerySupertype;

@QueryEntity
@QuerySupertype
public class QSampleEntity extends EntityPathBase<SampleEntity> {
    public QSampleEntity(String variable) {
        super(SampleEntity.class, variable);
    }
}

2.2. 필터링 쿼리 작성

Querydsl을 사용하여 조건 필터링을 하기 위해서는 BooleanExpression 객체를 사용해야 합니다. BooleanExpression은 조건에 해당하는 쿼리 식을 나타냅니다. 예를 들어, 특정 항목의 이름이 “Apple”인 데이터를 필터링하기 위한 쿼리는 다음과 같이 작성할 수 있습니다:

QSampleEntity sampleEntity = QSampleEntity.sampleEntity;
BooleanExpression filter = sampleEntity.name.eq("Apple");

2.3. 조건 필터링 실행

필터링 쿼리를 실행하기 위해 JPAQueryFactory를 사용합니다. JPAQueryFactory는 EntityManager를 사용하여 쿼리를 실행할 수 있도록 도와줍니다. 다음은 조건 필터링을 실행하는 예시 코드입니다:

QSampleEntity sampleEntity = QSampleEntity.sampleEntity;
JPAQueryFactory queryFactory = new JPAQueryFactory(entityManager);

List<SampleEntity> result = queryFactory
                .selectFrom(sampleEntity)
                .where(filter)
                .fetch();

위의 코드에서 entityManager는 EntityManager 객체입니다. 필터링된 결과는 fetch() 메서드를 사용하여 가져올 수 있습니다.

3. 결론

이렇게 Querydsl을 사용하여 특정 항목에 대한 조건 필터링을 할 수 있습니다. Querydsl을 사용하면 SQL 쿼리 작성에 대한 번거로움을 줄일 수 있고, 가독성이 좋은 Java 코드로 쿼리를 작성할 수 있습니다.

참고 자료: