- Querydsl의 경우 설정이 간단하지 않다.
- Spring Boot를 통해 프로젝트를 생성한 상태에서 진행한다.
- build.gradle
plugins {
id 'java'
id 'org.springframework.boot' version '2.7.14'
id 'io.spring.dependency-management' version '1.0.15.RELEASE'
}
group = 'study'
version = '0.0.1-SNAPSHOT'
java {
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-web'
// queryDSL 설정
implementation "com.querydsl:querydsl-jpa"
implementation "com.querydsl:querydsl-core"
implementation "com.querydsl:querydsl-collections"
annotationProcessor "com.querydsl:querydsl-apt:${dependencyManagement.importedProperties['querydsl.version']}:jpa" // querydsl JPAAnnotationProcessor 사용 지정
annotationProcessor "jakarta.annotation:jakarta.annotation-api" // java.lang.NoClassDefFoundError (javax.annotation.Generated) 대응 코드
annotationProcessor "jakarta.persistence:jakarta.persistence-api" // java.lang.NoClassDefFoundError (javax.annotation.Entity) 대응 코드
implementation 'com.github.gavlyukovskiy:p6spy-spring-boot-starter:1.5.8'
compileOnly 'org.projectlombok:lombok'
runtimeOnly 'com.h2database:h2'
annotationProcessor 'org.projectlombok:lombok'
testImplementation 'org.springframework.boot:spring-boot-starter-test'
}
tasks.named('test') {
useJUnitPlatform()
}
//querydsl 추가 시작
def querydslDir = "$buildDir/generated/querydsl"
// java source set 에 querydsl QClass 위치 추가
sourceSets {
main.java.srcDirs += [ querydslDir ]
}
// gradle clean 시에 QClass 디렉토리 삭제
clean {
delete file(querydslDir)
}
//querydsl 추가 끝
- 위와 같이 설정을 마친 다음 gradle를 Reload 해준다.
- Libraries에 querydsl이 추가된 것을 확인 할 수 있다.
- application을 실행하게되면 위와 같이 폴더와 클래스가 생성된다.
- build -> generated 폴더를 확인해보면 다음과 같이 (Hello, Member, Team 엔티티가 생성되어 있다고 가정한다.) Q(엔티티명)으로 클래스가 생성된 것을 확인 할 수 있다.
/**
* QMember is a Querydsl query type for Member
*/
@Generated("com.querydsl.codegen.DefaultEntitySerializer")
public class QMember extends EntityPathBase<Member> {
private static final long serialVersionUID = -769675599L;
private static final PathInits INITS = PathInits.DIRECT2;
public static final QMember member = new QMember("member1");
public final NumberPath<Integer> age = createNumber("age", Integer.class);
public final NumberPath<Long> id = createNumber("id", Long.class);
public final QTeam team;
public final StringPath username = createString("username");
public QMember(String variable) {
this(Member.class, forVariable(variable), INITS);
}
public QMember(Path<? extends Member> path) {
this(path.getType(), path.getMetadata(), PathInits.getFor(path.getMetadata(), INITS));
}
public QMember(PathMetadata metadata) {
this(metadata, PathInits.getFor(metadata, INITS));
}
public QMember(PathMetadata metadata, PathInits inits) {
this(Member.class, metadata, inits);
}
public QMember(Class<? extends Member> type, PathMetadata metadata, PathInits inits) {
super(type, metadata, inits);
this.team = inits.isInitialized("team") ? new QTeam(forProperty("team")) : null;
}
}
- 위와 같이 여러가지 필드와 메스스들이 자동으로 생성된다.
- 위와 같이 gradle library에 querydsl이 생성되고, application 실행 시 Q(엔티티명)이 생성되었다면 querydsl의 설정이 완료된다.
728x90
'Programming > Querydsl' 카테고리의 다른 글
Querydsl - 중급 문법 (2) 동적 쿼리 (0) | 2023.07.28 |
---|---|
Querydsl - 중급 문법 (1) (프로젝션) (0) | 2023.07.28 |
Querydsl - 기본 문법 (3) (조인, 서브 쿼리, Case문, 상수, 문자 더하기) (0) | 2023.07.27 |
Querydsl - 기본 문법 (2) (결과 조회, 정렬, 페이징, 집합) (0) | 2023.07.27 |
Querydsl - 기본 문법 (1) (기본 Q 타입, 검색, AND) (0) | 2023.07.26 |