ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • QueryDSL 소개
    김영한(인프런 강의)/실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화 2021. 2. 9. 18:06
    반응형

    www.querydsl.com/

     

     

    코드

    github.com/rlawls1991/Study_JPA_API

     

     

    QueryDSL

    사용이유

    Querydsl은 SQL(JPQL)과 모양이 유사하면서 자바 코드로 동적 쿼리를 편리하게 생성할 수 있다. 실무에서는 복잡한 동적 쿼리를 많이 사용하게 되는데, 이때 Querydsl을 사용하면 높은 개발 생산성을 얻으면서 동시에 쿼리 오류를 컴파일 시점에 빠르게 잡을 수 있다. 꼭 동적 쿼리가 아니라 정적 쿼리인 경우에도 다음과 같은 이유로 Querydsl을 사용하는 것이 좋다.

     

    장점

    • 직관적인 문법 컴파일 시점에 빠른 문법 오류 발견
    • 코드 자동완성
    • 코드 재사용(이것은 자바다)
    • JPQL new 명령어와는 비교가 안될 정도로 깔끔한 DTO 조회를 지원한다

     

    사용예시

    public List<Order> findAll(OrderSearch orderSearch) {
        QOrder order = QOrder.order;
        QMember member = QMember.member;
    
        return query
                .select(order)
                .from(order)
                .join(order.member, member)
                .where(statusEq(orderSearch.getOrderStatus()), nameLike(orderSearch.getMemberName()))
                .limit(1000)
                .fetch();
    }

     

    설정 방법

    1. build.gradle

    //querydsl 추가
    buildscript {
    	repositories {
    		maven {
    			url("https://plugins.gradle.org/m2/")
    		}
    	}
    	dependencies {
    		classpath("gradle.plugin.com.ewerk.gradle.plugins:querydsl-plugin:1.0.10")
    	}
    }
    
    plugins {
    	id 'org.springframework.boot' version '2.4.2'
    	id 'io.spring.dependency-management' version '1.0.10.RELEASE'
    	id 'java'
    }
    
    apply plugin: "com.ewerk.gradle.plugins.querydsl"
    
    group = 'jpa'
    version = '0.0.1-SNAPSHOT'
    sourceCompatibility = '11'
    
    configurations {
    	compileOnly {
    		extendsFrom annotationProcessor
    	}
    }
    
    repositories {
    	mavenCentral()
    }
    
    dependencies {
    	implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
    	implementation 'org.springframework.boot:spring-boot-starter-thymeleaf'
    	implementation 'org.springframework.boot:spring-boot-starter-web'
    	implementation 'org.springframework.boot:spring-boot-devtools'
    	implementation 'com.github.gavlyukovskiy:p6spy-spring-boot-starter:1.6.2'
    	implementation 'org.springframework.boot:spring-boot-starter-validation'
    	implementation 'com.fasterxml.jackson.datatype:jackson-datatype-hibernate5'
    
    	compileOnly 'org.projectlombok:lombok'
    	runtimeOnly 'com.h2database:h2'
    	annotationProcessor 'org.projectlombok:lombok'
    	testImplementation('org.springframework.boot:spring-boot-starter-test') {
    		exclude group: 'org.junit.vintage', module: 'junit-vintage-engine'
    	}
    	//querydsl 추가
    	implementation 'com.querydsl:querydsl-jpa'
    	//querydsl 추가
    	implementation 'com.querydsl:querydsl-apt'
    
    }
    
    test {
    	useJUnitPlatform()
    }
    
    //querydsl 추가
    //def querydslDir = 'src/main/generated'
    def querydslDir = "$buildDir/generated/querydsl"
    querydsl {
    	library = "com.querydsl:querydsl-apt"
    	jpa = true
    	querydslSourcesDir = querydslDir
    }
    sourceSets {
    	main {
    		java {
    			srcDirs = ['src/main/java', querydslDir]
    		}
    	}
    }
    compileQuerydsl{
    	options.annotationProcessorPath = configurations.querydsl
    }
    configurations {
    	querydsl.extendsFrom compileClasspath
    }

     

    2. Gradle > Task > other > compileQueryDsl 더블클릭

     

     

     

    반응형
Designed by Tistory.