본문 바로가기
프레임워크/JPA

[JAP] Querydsl 및 설정 테스트 코드

by so5663 2024. 11. 16.

Querydsl란?

스프링부트 + JPA + 스프링 DATA JPA 합쳐서 사용

하지만 복잡한 쿼리, 동적 쿼리를 구현할때 문제가 됨

이를 해결하는게 Querydsl입니다.

 

또 다른 장점으로는 Java 코드로 Query를 작성하기 때문에 문법 오류를 컴파일 시점에 딱 잡아줍니다.

또한 Querydsl은 파라미터 바인딩 자동 처리를 해줍니다.

 

Querydsl 테스트 코드

package study.querydsl;

import com.querydsl.jpa.impl.JPAQueryFactory;
import jakarta.persistence.EntityManager;

import org.assertj.core.api.Assertions;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.transaction.annotation.Transactional;
import study.querydsl.entity.Hello;
import study.querydsl.entity.QHello;

import static org.assertj.core.api.Assertions.*;

@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);
		assertThat(result.getId()).isEqualTo(hello.getId());

	}

}

Trouble Shooting

원인

QHello를 임포트 할 때, src/main 쪽의 QHello를 사용하는것 같은데,

build 경로에서 직접 사용해야 되는 문제가 발생

 

해결

settings or properties -> build tools -> gradle 에서 설정한 Build and Run

Gradle에서 Intellij로 변경한 부분 Gradle로 바꾸면 build -> generated -> sources -> ... -> main -> ... -> QHello

여기서 main 폴더가 root 폴더가 되면서 import 가능한 상태로 해결

gradle 의존관계 보기

Querydsl 라이브러리

./gradlew dependencies --configuration compileClasspath
  • querydsl-apt: Querydsl 관련 코드 생성 기능 제공
  • querydsl-jpa: querydsl 라이브러리

 

 

 

querydsl study git 링크

https://github.com/sohyounsoo/querydsl/tree/main

 

GitHub - sohyounsoo/querydsl

Contribute to sohyounsoo/querydsl development by creating an account on GitHub.

github.com

 

 

'프레임워크 > JPA' 카테고리의 다른 글

[JPA] Hint & Lock  (0) 2024.02.23
[JPA] Entity Graph  (1) 2023.10.24
[JPA] 임베디드 타입  (1) 2023.05.01
[JPA] 프록시와 연관관계(즉시로딩, 지연로딩, 영속성 전이)  (0) 2023.04.29
[JPA] 상속관계 매핑  (0) 2023.04.23