QueryDSL의 gradle 적용 방법은 Gradle 및 IntelliJ의 버전마다 크게 달라진다.
따라서, 다른 환경에선 아래 방법이 잘 적용되지 않을 수 있다. 나만해도 여러번의 시행착오 끝에 적용에 성공하였는데, 방법은 아래와 같다.
개발 환경
우선, 프로젝트의 SpringBoot 프레임워크의 버전은 3.2.1 버전이며, 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클래스의 생성 디렉토리도 명시해줘야하는 부분이 있었어서 상당히 까다로웠는데, 버전이 오르면서 관련된 설정도 편리해진 것 같다.
의존성을 추가했으면 Q클래스를 만들어야한다.
IntelliJ의 오른쪽 Gradle 탭에서 clean 실행 후 build를 실행한다.
위와 같이 하면 아래 이미지처럼 프로젝트 -> build -> generated 에서 JPA entity class를 생성했던 디렉토리 명과 동일한 디렉토리에 Q 클래스가 생성되는 것을 볼 수 있다.
프로젝트에서 QueryDSL을 사용하기 위해선 QueryDSL 설정이 필요한데, 아래와 같이 JPAQueryFactory를 Bean으로 등록한다.
@Configuration
@RequiredArgsConstructor
public class QueryDSLConfig {
private final EntityManager entityManager;
@Bean
public JPAQueryFactory jpaQueryFactory(){
return new JPAQueryFactory(entityManager);
}
}
Spring Data JPA는 JpaRepository를 상속한 Repository에서 사용자 정의 Repository 기능을 제공한다. 따라서, 기존에 있던 Repository의 CustomRepository 인터페이스를 정의하고 해당 인터페이스를 구현한 클래스를 기존 Repository에 상속해준다.
CustomRepository 인터페이스를 구현한 클래스는 Impl로 끝나야 하며, 해당 클래스에 QueryDSL 코드를 작성한다.
QueryDSL을 사용하기 위해 정의한 CustomRepository를 기존 Repository에 상속한다.
IDE에 빌드 폴더까지 인식하지 않으시는 분들을 위해서 추가설명
파일 - 프로젝트 구조 들어가서 $projectROOT\build\generated 폴더를 소스 폴더로 설정
이래야만 IDE 에서 Q 엔티티를 잡아서 넣을 수 있습니다.