-
#QueryDSL - 0QueryDSL 2021. 3. 29. 11:43
최신 JAVA BACKEND 기술은 스프링 부트 + 스프링 데이터 JPA 를 조합해서 사용.
하지만 이 것으로도 해결하지 못하는 문제가 있다.
문제
1. 복잡한 쿼리
2. 동적 쿼리
이런 문제들을 해결해줄수 있는것이 Querydsl이다.
Querydsl
1.쿼리를 문자가아니라 자바코드로 작성 문법 오류를 컴파일 시점에 해결
2.동적 쿼리 문제 해결
3.쉬운 SQL 스타일 문법
4.자바코드이기 때문에 메소드로 재사용성
Querydsl + Querydsl
단순 반복X
쿼리도 자바 코드로!
lombok setting
settings→ Build →complier→Annoation Processors - Enable annotation processing을 체크 후 재시작
Querydsl setting
build.gradle
querydsl 용 plugin querydsl 용 libarary source code
plugins { id 'org.springframework.boot' version ‘2.2.2.RELEASE' id 'io.spring.dependency-management' version '1.0.8.RELEASE' //querydsl 추가 id "com.ewerk.gradle.plugins.querydsl" version "1.0.10" id 'java' } group = 'study' version = '0.0.1-SNAPSHOT' sourceCompatibility = '1.8' configurations { compileOnly { extendsFrom annotationProcessor } } repositories { mavenCentral() } dependencies { implementation 'org.springframework.boot:spring-boot-starter-data-jpa' implementation 'org.springframework.boot:spring-boot-starter-web' //querydsl 추가 implementation 'com.querydsl:querydsl-jpa' 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' } } test { useJUnitPlatform() } //querydsl 추가 시작 def querydslDir = "$buildDir/generated/querydsl" querydsl { jpa = true querydslSourcesDir = querydslDir } sourceSets { main.java.srcDir querydslDir } configurations { querydsl.extendsFrom compileClasspath } compileQuerydsl { options.annotationProcessorPath = configurations.querydsl } //querydsl 추가 끝
Querydsl 검증
검증 Entity 생성
package study.querydsl.entity; import lombok.Getter; import lombok.Setter; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.Id; @Entity @Getter @Setter public class Hello { @Id @GeneratedValue private Long id; }
우측 상단 gradle -> task-> other->compileQuerydsl 더블클릭 plugin이랑 맞물려서 빌드될떄 configurations안에 넣고 컴파일될때 anntationProcessor가 같이 돌면서 qfile을 생성하는 것이다. build → generated →프로젝트패키지→QHello가 정상적으로 생성된 것을 볼 수 있다.
테스트를 통해 검증
@Test void contextLoads() { Hello hello = new Hello(); em.persist(hello); JPAQueryFactory query = new JPAQueryFactory(em); QHello qHello = new QHello("h"); Hello result = query .selectFrom(qHello) .fetchOne(); assertThat(result).isEqualTo(hello); assertThat(result.getId()).isEqualTo(hello.getId()); }
정상 동작 확인 Querydsl 라이브러리
querydsl-apt → code generated안에 QHello 같은 것을 만드는 용도로 사용
querydsl-jpa → 실제 querydsl core가 있는데 실제 코드짤떄 사용하는 라이브러리(ex .selectfrom())
'QueryDSL' 카테고리의 다른 글
#QueryDSL - 6 실무활용 <Spring Data JPA와 Querydsl> (0) 2021.04.04 #QueryDSL - 5 실무활용 <순수-JPA와 Querydsl> (0) 2021.04.01 #QueryDSL -3 - 기본문법 - Case문 / 상수,문자 더하기 (0) 2021.03.30 #QueryDSL - 2 기본문법 - JOIN (0) 2021.03.30 #QueryDSL -1 기본 Q-Type 활용 (0) 2021.03.29