ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [JPA] QueryDSL 소개 및 장점
    카테고리 없음 2024. 1. 14. 23:00

    QueryDSL이란?

    QueryDSL은 하이버네이트 쿼리 언어(HQL: Hibernate Query Language)의 쿼리를 타입에 안전하게 생성 및 관리해주는 프레임워크이다.
    QueryDSL은 정적 타입을 이용하여 SQL과 같은 쿼리를 생성할 수 있게 해 준다.자바 백엔드 기술은 Spring Boot와 Spring Data JPA를 함께 사용한다. 하지만, 복잡한 쿼리, 동적 쿼리를 구현하는 데 있어 한계가 있다. 이러한 문제점을 해결할 수 있는 것이 QueryDSL이다.
    QueryDSL이 등장하기 이전에는 Mybatis, JPQL, Criteria 등 문자열 형태로 쿼리문을 작성하여 컴파일 시에 오류를 발견하는 것이 불가능했다.
    하지만, QueryDSL은 자바 코드로 SQL 문을 작성할 수 있어 컴파일 시에 오류를 발생하여 잘못된 쿼리가 실행되는 것을 방지할 수 있다.

    // 형식
    List<Member> result = queryFactory
            .select(member)
            .from(member)
            .where(usernameEq(username))
            .fetch();

     

    세팅

    Gradle

    1. Plugin 추가
    2. dependencies 추가
    3. def 추가
    4. querydsl 추가
    5. sorceSets 추가
    6. compileQuerydsl 추가
    7. configurations 추가
    8. Gradle reload!
    buildscript {
    	ext {
    		queryDslVersion = "5.0.0"
    	}
    }
    
    dependencies {
    	implementation "com.querydsl:querydsl-jpa:${queryDslVersion}"
    	implementation "com.querydsl:querydsl-apt:${queryDslVersion}"
    }
    
    def querydslDir = "$buildDir/generated/querydsl"
    
    querydsl {
    	jpa = true
    	querydslSourcesDir = querydslDir
    }
    
    sourceSets {
    	main.java.srcDir querydslDir
    }
    
    configurations {
    	compileOnly {
    		extendsFrom annotationProcessor
    	}
    	querydsl.extendsFrom compileClasspath
    }
    
    compileQuerydsl {
    	options.annotationProcessorPath = configurations.querydsl
    }

     

    QueryDSL 장점

    • 문자가 아닌 코드로 쿼리를 작성할 수 있어 컴파일 시점에 문법 오류를 확인할 수 있다.
    • 인텔리제이와 같은 IDE의 자동 완성 기능의 도움을 받을 수 있다.
    • 복잡한 쿼리나 동적 쿼리 작성이 편리하다.
    • 쿼리 작성 시 제약 조건 등을 메서드 추출을 통해 재사용할 수 있다.
    • JPQL 문법과 유사한 형태로 작성할 수 있어 쉽게 적응할 수 있다.

     

     

    댓글

Designed by Tistory.