[JPA][QueryDSL] QueryDSL 세팅하기

koline·2024년 4월 26일

JPA

목록 보기
9/11

본 게시글은 Spring Boot 3.x 버전 이상, QueryDSL 5.x 버전 이상을 기준으로 작성된다.
Build 도구는 Gradle을 사용한다.
스프링부트 2.x 버전을 사용한다면 QueryDSL 버전도 다르게 사용해야 하며 세팅방법도 다르다.

1. Dependency 추가

// 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에 설정해두는 것이 좋다.


2. Config 파일 추가

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;
    }
}
profile
개발공부를해보자

0개의 댓글