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();
      }
    }