JPA를 사용하면서 SQL 과 비슷한듯 다른 JPQL Query가 제일 어려웠다...
웬만하면 이름 규칙으로 해결하면서 작업했지만... 쿼리를 코드로 작성할 수 있다고 해서 적용해 보았다.
굳이 JavaScript에서 TypeScript를 사용해서 작은 실수들을 잡아 주는 것처럼
컴파일 시점에 오류를 잡을 수 있기 때문에 일석이조!
implementation 'com.querydsl:querydsl-jpa:5.0.0:jakarta'
annotationProcessor "com.querydsl:querydsl-apt:5.0.0:jakarta"
annotationProcessor "jakarta.annotation:jakarta.annotation-api"
annotationProcessor "jakarta.persistence:jakarta.persistence-api"
의존성을 추가해 준다.
여러 블로그를 보면서 의존성을 추가해 봤는데 오류가 죽어도 해결이 안 되었고...
버전 문제인 건 알지만 그 어떤 포스팅의 해결법도 적용이 안 되었으나
어떤 딱 하나의 블로그를 보고 https://velog.io/@juhyeon1114/Spring-QueryDsl-gradle-%EC%84%A4%EC%A0%95-Spring-boot-3.0-%EC%9D%B4%EC%83%81
겨우 해결했다!!! (감사합니다)
@Configuration
public class QueryDslConfig {
@Bean
public JPAQueryFactory jpaQueryFactory(EntityManager entityManager) {
return new JPAQueryFactory(entityManager);
}
}
@Configuration 어노테이션으로 의존성 주입을 위한 클래스를 하나 만들어 준다.
public interface ExampleRepositoryDSL {
List<Example> findByCategoryAndEtc(String ex1, String ex2);
}
public interface ExampleRepository extends JpaRepository<Example, Integer>, ExampleRepositoryDSL {
}
JpaRepository를 상속받은 ExampleRepository가 이미 존재하는 가정 하에
Custom Repository를 만들어 준 다음 ExampleRepository 상속에 추가해 준다.
이후에는 ExampleRepository의 메소드를 사용해 줬던 것처럼 ExampleRepositoryDSL의 메소드를 사용할 수 있다.
@Repository
@RequiredArgsConstructor
public class ExampleRepositoryDSLImpl implements ExampleRepositoryDSL {
private final JPAQueryFactory queryFactory;
@Override
public List<Example> findByCategoryAndEtc(String ex1, String ex2) {
QExample example = QExample.example;
return queryFactory.selectFrom(example)
.where(
Example.category.eq(ex1),
Example.category.eq(ex2)
)
.fetch();
}
}
ExampleRepositoryDSL의 메소드를 Override 하여 쿼리를 지정해 준다.
JPQL을 코드로 풀어서 쓴다고 생각하면 된다.
QueryDSL을 사용하면 IntelliJ의 자동완성을 사용하여 실수 확률을 줄일 수 있고 속도도 빠르다!
가독성도 좋아서 추후 수정이 필요할 때 유지보수가 용이할 것 같다.
'BACK > Spring' 카테고리의 다른 글
| AES를 사용하여 url 암호화 구현해 보기 (0) | 2024.12.09 |
|---|---|
| SpringBoot 환경에서 ChatGpt API 사용해 보기 - Spring AI (0) | 2024.12.04 |
| Hmac를 사용하여 url 암호화 구현해 보기 (0) | 2024.11.25 |
| SpringBoot 환경에서 ChatGpt API 사용해 보기 (0) | 2024.11.22 |
| Spring 12 (0) | 2024.08.09 |