build.gradle

  • spring jpa 는 있다고 가정(아래 예제엔 없음)

    dependencies {
    ...
    // query dsl (당시 5.0.0 이 최신)
    def queryDSL = '5.0.0'
    implementation("com.querydsl:querydsl-jpa:${queryDSL}")
    implementation("com.querydsl:querydsl-apt:${queryDSL}:jpa")
    annotationProcessor("com.querydsl:querydsl-apt:${queryDSL}:jpa")
    annotationProcessor("org.hibernate.javax.persistence:hibernate-jpa-2.1-api:1.0.2.Final")
    annotationProcessor("javax.annotation:javax.annotation-api:1.3.2")
    }

QClass 생성(intellij 기준)

  • gradle -> Tasks -> build ->classes 더블 클릭

JPAQueryFactory 생성

  • entityManger 를 주입받아 JPAQueryFactory 생성시 생성자로 넣어준다.

    @RequiredArgsConstructor
    @Configuration
    public class JPAQueryConfig {
    private final EntityManager entityManager;
    @Bean
    public JPAQueryFactory jpaQueryFactory() {
    return new JPAQueryFactory(entityManager);
    }
    }

실제 사용 코드

  • testEntity 는 QClass 로 생성되었을테니 강제로 static class를 import 한다.\

    @RequiredArgsConstructor
    @Repository
    public class TestRepositorySupport {
    private final JPAQueryFactory jpaQueryFactory;
    public List<TestEntity> find() {
    return jpaQueryFactory.selectFrom(testEntity)
    .where(testEntity.text.eq("ttt"))
    .fetch();
    }
    }