Query Dsl
- 시작하게 된 계기
- 이전에 프로젝트에서 써봤는데
- 더 알고 싶어졌고, 최근에는 프로젝트를 JPA로 하지 않았기 때문에 좀 까먹었었다.
- 정리 겸 나중에 기억나게 세팅하는 법부터 정리할 예정
Gradle설정
- Spring Boot 3.x 설정입니다. 2.x설정은 또 다릅니다.
1. 의존성 추가
plugins {
id 'java'
id 'org.springframework.boot' version '3.2.1'
id 'io.spring.dependency-management' version '1.1.4'
}
group = 'study'
version = '0.0.1-SNAPSHOT'
java {
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'
compileOnly 'org.projectlombok:lombok'
runtimeOnly 'com.h2database:h2'
annotationProcessor 'org.projectlombok:lombok'
testImplementation 'org.springframework.boot:spring-boot-starter-test'
// QueryDSL Implementation
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"
}
test {
useJUnitPlatform()
}
/**
* QueryDSL Build Options
*/
def querydslDir = "src/main/generated"
sourceSets {
main.java.srcDirs += [ querydslDir ]
}
tasks.withType(JavaCompile).configureEach {
options.getGeneratedSourceOutputDirectory().set(file(querydslDir))
}
clean.doLast {
file(querydslDir).deleteDir()
}
2. 빌드 버튼 클릭
이게 코끼리 빌드를 눌러준다. 혹은 ./gradlew clean build
build/generated/study/querydsl/entity/ -> 내가 만든 엔티티 클래스에 Q가 붙은 것을 볼 수 있다.
3. Q달린 파일 확인
/**
* QHello is a Querydsl query type for Hello
*/
@Generated("com.querydsl.codegen.DefaultEntitySerializer")
public class QHello extends EntityPathBase<Hello> {
private static final long serialVersionUID = 1910216155L;
public static final QHello hello = new QHello("hello");
public final NumberPath<Long> id = createNumber("id", Long.class);
public QHello(String variable) {
super(Hello.class, forVariable(variable));
}
public QHello(Path<? extends Hello> path) {
super(path.getType(), path.getMetadata());
}
public QHello(PathMetadata metadata) {
super(Hello.class, metadata);
}
}
- Query dsl이 내가 만들어둔 Hello Entity를 바탕으로 QHello 파일을 만들어 줍니다.
- Git에 올리지 말자.!
- /src/main/generated/ <-- gitignore 추가
4. 테스트 코드 작성 Qclass 사용
@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");
Hello result = query
.selectFrom(qHello)
.fetchOne();
assertThat(result).isEqualTo(hello);
}
}
'Spring관련 기술 > JPA' 카테고리의 다른 글
Querydsl - 검색 조건 쿼리 (0) | 2024.01.16 |
---|---|
Querydsl - 기본 QType 활용 (0) | 2024.01.16 |
JPQL vs Querydsl (0) | 2024.01.16 |
QueryDsl 라이브러리 살펴보기 (0) | 2024.01.14 |
고아객체 (0) | 2023.12.16 |