본문 바로가기
Spring/QueryDSL

Querydsl 설정과 검증

by 개복이 2022. 12. 11.

[build.gradle]

  • 스프링 부트 2.6 버전 이상부터 querydsl  gradle 설정이 변경되었습니다.
  • 최근에는 3.0 버전이 나왔는데, 이후 버전의 gradle 설정은 다음에 알아보도록 하겠습니다.
// 추가
buildscript {
    ext {
    	queryDslVersion = '5.0.0'
    }
}

plugins {
    id 'java'
    id 'org.springramework.boot' version '2.7.6'
    id 'io.spring.dependency-management' version '1.0.15.RELEASE'
    // 추가
    id 'com.ewerk.gradle.plugins.querydsl' version '1.0.10'
}

...

dependencies {
    // 추가
    implementation 'com.querydsl:querydsl-jpa:${queryDslVersion}'
    implementation "com.querydsl:querydsl-apt:${queryDslVersion}"
    implementation "com.querydsl:querydsl-core:${queryDslVersion}"
    
    ...
}

...

// querydsl 빌드 경로 변수
def querydslDir = '$buildDir/generated/querydsl'

querydsl {
    jpa = true
    querydslSourceDir = querydslDir
}

// build시 사용할 sourceSet
sourceSets {
    main.java.srcDir querydslDir
}

configurations {
    querydsl.extendsFrom compileClasspath
}

// querydsl compile시 사용할 옵션
compileQuerydsl {
    options.annotationProcessorPath = configuration.querydsl
}

 

[검증]

  • build.gradle 설정 파일에 Querydsl 설정이 끝났다면.. 잘 실행되는지 검증을 해봐야 합니다..
  • 테스트를 위해 간단한 Entity 클래스 파일을 생성해봅니다.
@Entity
@Getter
@NoArgsConstructor(access = AccessLevel.PROTECTED)
public class Member {

    @Id
    @GeneratedValue
    @Column(name = "member_id")
    private Long id;
    private String username;
    
    public Member(String username){
        this.username = username;
    }
}

 

  • [IntelliJ 빌드 방법]
    • Gradle -> Tasks -> build -> clean
    • Gradle -> Tasks -> other -> compileQuerydsl
  • [Gradle 콘솔 방법] 
    • 프로젝트 디렉토리 이동 후 ./gradlew clean compileQuerydsl 명령어 실행

  • build.gradle에 빌드 경로( build/generated/querydsl )에 앞서 생성한 Entity 클래스가 Q타입으로 생성됩니다.
@SpringBootTest
@Transactional
class QuerydslTest {
    
    @Autowired
    JPAQueryFactory queryFactory;
    
    ...
    
    @Test
    void startQuerydsl(){
        
        QMember m = new QMember("m");
        Member findMember = queryFactory.select(m)
                                        .from(m)
                                        .where(m.username.eq("lee"))
                                        .fetchOne():
                                        
        assertThat(findMember.getUsername()).isEqualTo("lee");                                        
    }
}
  • 간단한 테스트 케이스를 작성 후 검증해봅니다..
    여기서는 데이터를 저장하는 부분까지는 없으니, 그부분은 따로 해보시길 바랍니다..

'Spring > QueryDSL' 카테고리의 다른 글

사용자 정의 Repository  (0) 2021.06.19
페이징 활용 2 - CountQuery 최적화  (0) 2021.06.18
페이징 활용 1 - Querydsl 페이징 연동  (0) 2021.06.17
SQL function 호출하기  (0) 2021.06.16
수정, 삭제 벌크연산  (0) 2021.06.15

댓글