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
'프레임워크 > 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 |