Config 설정
queryDSL을 사용하기 위해서 Dependency를 추가해줘야 한다.
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"
build.gradle에 해당 스크립트를 추가해준다.
그리고 queryDSL은 JPAQueryFactory를 통해서 사용해야 하기 때문에 빈 등록을 해줘야 한다.
Config 파일을 따로 만들어도 되지만, 나는 JpaConfig 파일이 있기 때문에 거기에 코드를 작성했다.
@Configuration
@EnableJpaAuditing
@RequiredArgsConstructor
public class JpaConfig {
private final EntityManager entityManager;
@Bean
public JPAQueryFactory jpaQueryFactory() {
return new JPAQueryFactory(entityManager);
}
}
이렇게 entityManager를 넣어주고 나면 JPAQueryFactory를 사용할 수 있게 된다.
사용 방법
사용 방법은 JpaRepository와 비슷하게 사용하면 된다.
@Repository
@RequiredArgsConstructor
public class ApiUseTimeQuery {
private final JPAQueryFactory query;
public List<User> getEvent() {
QUserEntity user = QUserEntity.userEntity;
QApiUseTime time = QApiUseTime.apiUseTime;
List<UserEntity> result = query.select(user)
.from(user)
.join(time)
.on(user.userId.eq(time.userId))
.orderBy(time.totalTime.desc())
.fetch();
return result.stream().map(userEntity -> userEntity.toModel()).toList();
}
}
@Repository 어노테이션을 사용해서 빈 객체로 만들어주고 JPAQueryFactory 를 선언하여 사용하면 된다.
queryDSL은 QClass를 생성해주는데 이는 엔티티 클래스의 메타 정보를 담고 있는 클래스이다.
QClass를 통해 테이블로 사용하면 된다.조인과 같은 복잡한 쿼리에 대해서는 queryDSL이나 JPQL이 많이 편한 것 같다.
'Language > Java' 카테고리의 다른 글
Spring에서 SQL Injection을 어떻게 방어할까? (0) | 2024.05.23 |
---|---|
JPA에 대해 깊이 알아보자 (0) | 2024.03.07 |
Service 인터페이스와 구현체 분리 (0) | 2024.03.06 |
@Component, @Bean, @Autowired가 뭘까? (0) | 2024.03.05 |
@NoArgsConstructor (access = AccessLevel.PROTECTED) 사용 이유 (0) | 2024.03.04 |