상세 컨텐츠

본문 제목

[SPRING] Querydsl | queryDSL이란

JAVA/기본 & 강의복습

by ranlan 2021. 4. 29. 04:02

본문

728x90

[Inflearn] 실전! Querydsl - 김영한 https://www.inflearn.com/course/Querydsl-%EC%8B%A4%EC%A0%84/dashboard

 

실전! Querydsl - 인프런 | 강의

Querydsl의 기초부터 실무 활용까지 한번에 해결, 본 강의는 자바 백엔드 개발의 실전 코스를 완성하는 마지막 강의 입니다. 스프링 부트와 JPA 실무 완전 정복 로드맵을 우선 확인해주세요. 로드

www.inflearn.com

[GIT] https://github.com/ijo0r98/querydsl

 

GitHub - ijo0r98/querydsl: [Inflearn] 실전! Querydsl - 김영한

[Inflearn] 실전! Querydsl - 김영한. Contribute to ijo0r98/querydsl development by creating an account on GitHub.

github.com


 

Querydsl이란

정적 타입을 이용해서 SQL과 같은 쿼리를 생성할 수 있도록 해 주는 프레임워크으로 엔티티에 대한  Qclass를 생성하여 사용한다.

/**
 * QMember is a Querydsl query type for Member
 */
@Generated("com.querydsl.codegen.EntitySerializer")
public class QMember extends EntityPathBase<Member> {

    private static final long serialVersionUID = -769675599L;

    private static final PathInits INITS = PathInits.DIRECT2;

    public static final QMember member = new QMember("member1");

    public final NumberPath<Integer> age = createNumber("age", Integer.class);

    public final NumberPath<Long> id = createNumber("id", Long.class);

    public final QTeam team;

    public final StringPath username = createString("username");

    ...
}

[Querydsl 레퍼런스] www.querydsl.com/static/querydsl/4.0.1/reference/ko-KR/html_single/

 

Querydsl - 레퍼런스 문서

본 절에서는 SQL 모듈의 쿼라 타입 생성과 쿼리 기능을 설명한다. com.querydsl.sql.Configuration 클래스를 이용해서 설정하며, Configuration 클래스는 생성자 인자로 Querydsl SQL Dialect를 취한다. 예를 들어, H2

www.querydsl.com

Querydsl을 사용함으로써 JPA로 해결하지 못하는 복잡한 쿼리나 동적 쿼리 생성이 가능하다. 자바 코드로 쿼리를 작성하기 때문에 컴파일 시점에서 뛰어쓰기, 오타 등의 오류를 발견할 수 있을 뿐 아니라 자동 완성 기능의 도움을 받을 수 있다. 또한 단순 반복 작업을 줄여줘 핵심 비지니스 로직 개발에 더욱 집중할 수 있으며 메서드로 이용하여 코드 재사용성을 높인다.

 

 

환경설정

build.gradle(*build.gradle 수정 후 Gradle 새로고침은 필수)

plugins {
    // queryDSL plugin 추가
    id "com.ewerk.gradle.plugins.querydsl" version "1.0.10"
}

dependencies {

    //querydsl library 추가
    implementation 'com.querydsl:querydsl-jpa'
}

// querydsl builder
def querydslDir = "$buildDir/generated/querydsl"
querydsl {
    jpa = true
    querydslSourcesDir = querydslDir
}
sourceSets {
    main.java.srcDir querydslDir
}
configurations {
    querydsl.extendsFrom compileClasspath
}
compileQuerydsl {
    options.annotationProcessorPath = configurations.querydsl
}

 

$buildDir/generated/querydsl : Q타입이 생성될 경로 지정

 

Qtype이 생성된 모습

 

※ 새로 엔티티를 생성하여 그에 대한 Q타입을 생성해야할 때

- intellij

초기화 : Gradle > Tasks > build > clean
Q타입 컴파일 : Gradle > Tasks > other > Gradle Tasks other compileQuerydsl

 

 

- 콘솔

./gradlew clean compileQuerydsl

위의 경로(build/generated/querydsl/..)에 새로운 엔티티에 대한 Q타입이 생겼는지 확인

 

 

Q타입은 컴파일 시점에 자동 생성되므로 버전관리(GIT)에 포함하지 않는 것이 좋은데 앞서 설정에서 생성 위치를 build 폴더 아래 생성되도록 했기 때문에 이 부분도 자연스럽게 해결된다(대부분 gradle build 폴더를 git에 포함하지 않는다).

 

 

 

728x90

관련글 더보기

댓글 영역