먼저 gradle 의존성 주입을 해줘야한다.
implementation 'com.querydsl:querydsl-jpa:5.0.0:jakarta'
annotationProcessor "com.querydsl:querydsl-apt:${dependencyManagement.importedProperties['querydsl.version']}:jakarta"
annotationProcessor "jakarta.annotation:jakarta.annotation-api"
annotationProcessor "jakarta.persistence:jakarta.persistence-api"
스프링 부트 3.0~ 이후버전부턴 jakarta를 꼭 적어줘야함
이건 선택적으로 해주면 된다
compileJava {
options.compilerArgs << '-Aquerydsl.generatedAnnotationClass=javax.annotation.Generated'
}
def querydslDir = "$buildDir/generated/querydsl"
sourceSets {
main.java.srcDirs += [querydslDir]
}
clean.doLast {
file(querydslDir).deleteDir()
}
그 뒤 config 설정을 해준다.
@Configuration
public class QueryDslConfig {
@PersistenceContext
private EntityManager em;
@Bean
public JPAQueryFactory jpaQueryFactory() {
return new JPAQueryFactory(em);
}
}
QueryDslPostRepository
public interface QueryDslPostRepository {
List<Post> findAll(Keyword keyword);
}
QueryDslPostRepositoryImp
@Repository
@RequiredArgsConstructor
public class QueryDslPostRepositoryImp implements QueryDslPostRepository {
private final JPAQueryFactory jpaQueryFactory;
@Override
public List<Post> findAll(Keyword keyword) {
jpaQueryFactory.select(QPost.post);
return null;
}
}
만약 Q클래스가 나오지않는다면 build를 다시 해보거나, 한번 실행해주면 된다.
spring cloud config와 연동할때 문제점이 식별 되었고 그 수정사항은 여기를 눌러주세요