Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 스프링 핵심 기능
- 그리디
- JDBC
- AOP
- java
- pointcut
- 백준
- Greedy
- kotlin
- http
- JPQL
- transaction
- 자바
- SpringBoot
- Proxy
- Servlet
- Android
- spring
- db
- QueryDSL
- 김영한
- springdatajpa
- Thymeleaf
- 스프링 핵심 원리
- 알고리즘
- Exception
- 인프런
- 스프링
- Spring Boot
- jpa
Archives
- Today
- Total
개발자되기 프로젝트
QueryDSL소개 본문
1. QeryDSL?
JPQL을 자바 코드로 작성하게 도와줌.
2. build.gradle
QueryDsl을 사용하려면 Q파일이 필요
라이브러리 추가.
//querydsl 추가
implementation 'com.querydsl:querydsl-jpa'
//querydsl 추가
implementation 'com.querydsl:querydsl-apt'
plugin 추가.
apply plugin: 'io.spring.dependency-management'
apply plugin: "com.ewerk.gradle.plugins.querydsl"
QueryDsl추가 생성된Q파일은 어디에 저장?
//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
}
전체
//querydsl 추가
buildscript {
dependencies {
classpath("gradle.plugin.com.ewerk.gradle.plugins:querydsl-plugin:1.0.10")
}
}
plugins {
id 'org.springframework.boot' version '2.5.3'
id 'io.spring.dependency-management' version '1.0.11.RELEASE'
id 'java'
}
apply plugin: 'io.spring.dependency-management'
apply plugin: "com.ewerk.gradle.plugins.querydsl"
group = 'example'
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 'junit:junit:4.13.1'
implementation 'com.github.gavlyukovskiy:p6spy-spring-boot-starter:1.5.6'
implementation 'org.springframework.boot:spring-boot-starter-validation'
//implementation 'junit:junit:4.13.1'
//implementation group: 'org.javassist', name: 'javassist', version: '3.15.0-GA'
// https://mvnrepository.com/artifact/com.fasterxml.jackson.datatype/jackson-datatype-hibernate5
implementation group: 'com.fasterxml.jackson.datatype', name: 'jackson-datatype-hibernate5'
compileOnly 'org.projectlombok:lombok'
runtimeOnly 'com.h2database:h2'
annotationProcessor 'org.projectlombok:lombok'
testImplementation 'org.springframework.boot:spring-boot-starter-test'
testImplementation("org.junit.vintage:junit-vintage-engine") {
exclude group: "org.hamcrest", module: "hamcrest-core"
}
//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
}
gradle build 완료 후 compileQuerydsl을 실행하자.
뭔가 이것저것 생겼다.
- Querydsl은 SQL(JPQL)과 모양이 유사하면서 자바 코드로 동적 쿼리를 편리하게 생성할 수 있다.
- 실무에서는 복잡한 동적 쿼리를 많이 사용하게 되는데,
- 이때 Querydsl을 사용하면 높은 개발 생산성을얻으면서
- 동시에 쿼리 오류를 컴파일 시점에 빠르게 잡을 수 있다.
- 꼭 동적 쿼리가 아니라 정적 쿼리인 경우에도 다음과 같은 이유로 Querydsl을 사용하는 것이 좋다.
- 직관적인 문법
- 컴파일 시점에 빠른 문법 오류 발견
- 코드 자동완성
- 코드 재사용(이것은 자바다)
- JPQL new 명령어와는 비교가 안될 정도로 깔끔한 DTO 조회를 지원한다.
- Querydsl은 JPQL을 코드로 만드는 빌더 역할을 할 뿐이다. 따라서 JPQL을 잘 이해하면 금방 배울 수
있다. - Querydsl은 JPA로 애플리케이션을 개발 할 때 선택이 아닌 필수라 생각한다.
GItHub : 210826 queryDsl
'인프런 > [인프런] Springboot와 JPA활용 2' 카테고리의 다른 글
스프링 데이터 JPA 소개 (0) | 2021.08.26 |
---|---|
OSIV와 성능 최적화 (0) | 2021.08.26 |
API 개발 정리 (0) | 2021.08.25 |
컬렉션 조회 최적화 : 플랫 데이터 최적화 (0) | 2021.08.25 |
컬렉션 조회 : 최적화 (0) | 2021.08.25 |
Comments