Querydsl 프로젝트 설정

Hyeon·2023년 7월 24일
0

Querydsl

목록 보기
5/7

프로젝트 생성

querydsl 은 스프링부트에서 버전관리는 해주지만, starter에는 없다. 따로 라이브러리를 내려받아야 한다. 따라서 프로젝트 생성 시 아래와 같은 Dependencies 로 설정한다.

엔티티 생성

테스트를 위해 pk 만 가지는 엔티티를 entity 패키지 내부에 생성한다.

@Entity
@Getter @Setter
public class Hello {

    @Id @GeneratedValue
    private Long id;
}

Querydsl 설정

build.gradle를 아래와 같이 수정한다.

plugins {
	id 'java'
	id 'org.springframework.boot' version '3.1.2'
	id 'io.spring.dependency-management' version '1.1.2'
	//querydsl 추가
	id "com.ewerk.gradle.plugins.querydsl" version "1.0.10"
}

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'

	// query 파라미터 보이게 하는 라이브러리
	implementation 'com.github.gavlyukovskiy:p6spy-spring-boot-starter:1.9.0'

	// 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"

	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"

querydsl {
	jpa = true
	querydslSourcesDir = querydslDir
}
sourceSets {
	main.java.srcDir querydslDir
}
configurations {
	querydsl.extendsFrom compileClasspath
}
compileQuerydsl {
	options.annotationProcessorPath = configurations.querydsl
}
//querydsl 추가 끝

빌드

방법1

인텔리제이 오른쪽 Gradle > Tasks/other/compileQuerydsl 누른다.

방법2

// 1
./gradlew compileQuerydsl
// 2
./gradlew compileJava

빌드가 되면서 build/generated/querydsl 내부에 study.querydsl.entity/QHello 파일이 생성되면 성공이다.

generated 는 git에 절대 올리면 안된다.
지금은 build안에 위치하니까 수동으로 gitignore 하지 않아도 된다.

Querydsl 테스트


@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"); // h는 alias
		QHello qHello = QHello.hello;
		
		Hello result = query
				.selectFrom(qHello)
				.fetchOne();

		assertThat(result).isEqualTo(hello);
		assertThat(result.getId()).isEqualTo(hello.getId());
	}

}

테스트가 성공하면 Querydsl 세팅 성공이다!

출처

profile
컴공학부생입니다.

1개의 댓글

comment-user-thumbnail
2023년 7월 24일

좋은 글이네요. 공유해주셔서 감사합니다.

답글 달기