백엔드 부트캠프/TIL
[내일배움캠프Spring-55일차] Qeury Dsl 설정하기
sintory-04
2025. 5. 7. 15:04
1. Gradle 설정
dependencies {
// Query Dsl
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"
}
// Querydsl generated 경로 설정
def querydslDir = "build/generated/querydsl"
tasks.withType(JavaCompile) {
options.generatedSourceOutputDirectory = file(querydslDir)
}
clean {
delete file(querydslDir)
}
- 의존성에는 위와 같이 추가했고, 추가적으로 Generated 경로를 설정해주었다.
- 블로그들 다양하게 참고해보았지만, 이상하게,, 몇몇은 안되었지만 해당 설정은 잘 되는 거같다 !
- 여기서 중요한건 Spring 3.0 이상 버전이라는 것 !
2. 애플리케이션 실행
- 애플리케이션 실행할 때, 사진 과 같이 QEntity 가 생성되었는지 확인 해야한다.
- 만약 잘 되지 않을 시, 파일을 삭제하고 다시 실행하는 등의 행위를 해야한다.
3. Config 설정
- 저렇게 generated 가 생성된 것이라면 ! 반은 온 것이다.
- QueryDSL 를 사용할 것이라고 이제 Config 설정을 해주어야하
package org.example.expert.config;
import com.querydsl.jpa.impl.JPAQueryFactory;
import jakarta.persistence.EntityManager;
import lombok.RequiredArgsConstructor;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
@RequiredArgsConstructor
public class QuerydslConfig {
private final EntityManager entityManager;
@Bean
public JPAQueryFactory jpaQueryFactory() {
return new JPAQueryFactory(entityManager);
}
}
4. Repository Interface 만들기
public interface TodoCustomRepository {
Optional<Todo> findByIdWithUser(Long todoId);
}
5. TodoCustomRepositoryImpl 만들기
@Repository
@RequiredArgsConstructor
public class TodoCustomRepositoryImpl implements TodoCustomRepository{
private final JPAQueryFactory jpaQueryFactory;
@Override
public Optional<Todo> findByIdWithUser(Long todoId) {
return Optional.ofNullable(
jpaQueryFactory
.selectFrom(todo)
.leftJoin(todo.user).fetchJoin()
.where(todo.id.eq(todoId))
.fetchOne()
);
}
}
- 이렇게 설정하면 끝 : > !