BACK/JPA

[JPA] Querydsl 프로젝트 환경설정 - 설정과 검증

연듀 2024. 3. 15. 20:49

 

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

https://www.inflearn.com/course/querydsl-%EC%8B%A4%EC%A0%84