Querydsl 이란?
쿼리를 자바 코드로 작성할 수 있게 도와준다.
문법 오류를 컴파일 시점에 잡아준다.
동적 쿼리 문제도 해결해준다.
Querydsl 설정과 검증
build.gradle
plugins {
id 'java'
id 'org.springframework.boot' version '3.2.0'
id 'io.spring.dependency-management' version '1.1.4'
}
group = 'study'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = '17'
configurations {
compileOnly {
extendsFrom annotationProcessor
}
}
repositories {
mavenCentral()
}
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
implementation 'org.springframework.boot:spring-boot-starter-web'
implementation 'com.github.gavlyukovskiy:p6spy-spring-boot-starter:1.9.0'
compileOnly 'org.projectlombok:lombok'
runtimeOnly 'com.h2database:h2'
annotationProcessor 'org.projectlombok:lombok'
testImplementation 'org.springframework.boot:spring-boot-starter-test'
//test 롬복 사용
testCompileOnly 'org.projectlombok:lombok'
testAnnotationProcessor 'org.projectlombok:lombok'
//Querydsl 추가
implementation 'com.querydsl:querydsl-jpa:5.0.0:jakarta'
annotationProcessor "com.querydsl:querydsl-apt:${dependencyManagement.importedProperties['querydsl.version']}:jakarta"
annotationProcessor "jakarta.annotation:jakarta.annotation-api"
annotationProcessor "jakarta.persistence:jakarta.persistence-api"
}
tasks.named('test') {
useJUnitPlatform()
}
clean {
delete file('src/main/generated')
}
검증용 엔티티 생성
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;
}
clean → build → compileJava
(gradle 콘솔 사용법 : ./gradlew clean compileJava)
build 폴더 → generated … - >annotationProcessor → java → main → … Q타입 엔티티 생성 확인
querydsl이 entity를 보고 Q타입의 엔티티를 생성해준다.
참고로 Q파일은 git 에 올리면 안된다.
보통 build 파일은 gradle 에서 ignore 하고 쓰기 때문에 git 에 안올라간다.
@SpringBootTest
@Transactional
class QuerydslApplicationTests {
@Autowired
EntityManager em;
@Test
void contextLoads() {
Hello hello = new Hello();
em.persist(hello);
JPAQueryFactory query = new JPAQueryFactory(em);
//QHello qHello = new QHello("h");
QHello qHello = QHello.hello; // static 으로 만들어 놓은 객체가 있다.
Hello result = query.
selectFrom(qHello)
.fetchOne();
assertThat(result).isEqualTo(hello);
assertThat(result.getId()).isEqualTo(hello.getId());
}
}
인프런 - 실전! Querydsl
'BACK > JPA' 카테고리의 다른 글
[JPA] Querydsl 중급 문법 (프로젝션, 동적 쿼리, 벌크 연산, SQL function) (1) | 2024.03.15 |
---|---|
[JPA] Querydsl 기본 문법 (검색, 조회, 정렬, 페이징, 집합, 조인등) (0) | 2024.03.15 |
[JPA] Dirty Checking(변경 감지) (0) | 2023.04.11 |
[JPA] Executing an update/delete query 에러 해결 (0) | 2022.08.31 |
[JPA] Entity List를 DTO리스트로 바꾸기 (0) | 2022.08.01 |