[Gradle] SpringBoot 3.x + QueryDSL 적용하기

Sundae·2024년 1월 29일
0
post-thumbnail

QueryDSL

QueryDSL의 gradle 적용 방법은 Gradle 및 IntelliJ의 버전마다 크게 달라진다.

따라서, 다른 환경에선 아래 방법이 잘 적용되지 않을 수 있다. 나만해도 여러번의 시행착오 끝에 적용에 성공하였는데, 방법은 아래와 같다.

개발 환경

  • IDE: IntelliJ
  • jdk: openjdk 17
  • Gradle 8.5(Grooby)

1. build.Gradle


우선, 프로젝트의 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클래스를 만들어야한다.



2. Q 클래스 생성하기


IntelliJ의 오른쪽 Gradle 탭에서 clean 실행 후 build를 실행한다.

위와 같이 하면 아래 이미지처럼 프로젝트 -> build -> generated 에서 JPA entity class를 생성했던 디렉토리 명과 동일한 디렉토리에 Q 클래스가 생성되는 것을 볼 수 있다.



3. QueryDSL Configuration


프로젝트에서 QueryDSL을 사용하기 위해선 QueryDSL 설정이 필요한데, 아래와 같이 JPAQueryFactory를 Bean으로 등록한다.

@Configuration
@RequiredArgsConstructor
public class QueryDSLConfig {
    private final EntityManager entityManager;

    @Bean
    public JPAQueryFactory jpaQueryFactory(){
        return new JPAQueryFactory(entityManager);
    }
}

4. Repository를 통해 QueryDSL 사용하기


Spring Data JPA는 JpaRepository를 상속한 Repository에서 사용자 정의 Repository 기능을 제공한다. 따라서, 기존에 있던 Repository의 CustomRepository 인터페이스를 정의하고 해당 인터페이스를 구현한 클래스를 기존 Repository에 상속해준다.

4.1 CustomRepository 생성하기

4.2 CustomRepositoryImpl 생성하기

CustomRepository 인터페이스를 구현한 클래스는 Impl로 끝나야 하며, 해당 클래스에 QueryDSL 코드를 작성한다.

4.3 기존 Repository에 CustomRepository 상속받기

QueryDSL을 사용하기 위해 정의한 CustomRepository를 기존 Repository에 상속한다.

profile
성장 기록 / 글에 오류가 있다면 댓글 부탁드립니다.

1개의 댓글

comment-user-thumbnail
2024년 9월 10일

IDE에 빌드 폴더까지 인식하지 않으시는 분들을 위해서 추가설명

파일 - 프로젝트 구조 들어가서 $projectROOT\build\generated 폴더를 소스 폴더로 설정
이래야만 IDE 에서 Q 엔티티를 잡아서 넣을 수 있습니다.

답글 달기