본 게시글은 Spring Boot 3.x 버전 이상, QueryDSL 5.x 버전 이상을 기준으로 작성된다.
Build 도구는 Gradle을 사용한다.
스프링부트 2.x 버전을 사용한다면QueryDSL버전도 다르게 사용해야 하며 세팅방법도 다르다.
// build.gradle
// 의존성 추가
dependencies {
// QueryDSL
implementation 'com.querydsl:querydsl-jpa:5.0.0:jakarta'
annotationProcessor 'com.querydsl:querydsl-apt:5.0.0:jakarta'
annotationProcessor "jakarta.annotation:jakarta.annotation-api"
annotationProcessor "jakarta.persistence:jakarta.persistence-api"
}
// Q타입 엔티티가 생성될 경로
def querydslSrcDir = 'src/main/generated'
// clean 시 Q타입 삭제
clean {
delete file(querydslSrcDir)
}
// compile시 Q타입 경로에 파일 생성
tasks.withType(JavaCompile).configureEach {
options.generatedSourceOutputDirectory = file(querydslSrcDir)
}
여기서 지정한 경로는 이후 git에 commit 할 때는 파일들이 올라가지 않도록 .gitignore에 설정해두는 것이 좋다.
QueryDSL 환경설정 파일을 생성하여 애플리케이션 전역에서 사용할 수 있도록 Bean으로 만든다.
// QueryDslConfig.java
@Configuration
public class QueryDslConfig {
@PersistenceContext
private final EntityManager entityManager;
public QueryDslConfig() {
}
@Bean
public JPAQueryFactory jpaQueryFactory() {
return new JPAQueryFactory(this.entityManager);
}
}
여기까지 하면 매우 간단하게 세팅이 끝난다.
이렇게 Bean에 등록한 JPAQueryFactory 객체를 아래와 같이 import하여 사용하면 된다.
// QueryDSL 적용 예시 코드
@Repository
@RequiredArgsConstructor
public class MemberCustomRepositoryImpl implements MemberCustomRepository {
// JPAQueryFactory 선언
private final JPAQueryFactory query;
@Override
public boolean existsByMemberEmail(String email) {
return query.selectOne()
.from(memberEntity)
.where(memberEntity.email.eq(email))
.fetchFirst() != null;
}
}