개발/부트캠프

본캠프 : QueryDSL

EJ EJ 2025. 3. 13. 20:52

QueryDSL 사용법 

: QueryDSL은 자바 기반 오픈 소스 프레임워크로, SQL 쿼리를 더욱 쉽고 편리하게 작성할 수 있도록 도와주는 라이브러리

 

 

1.의존성 추가(build.gradle - dependencies)

이후 코끼리 클릭!

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!

 

Q클래스 생성 확인!

 

 

2.JPAConfiguration 클래스 생성

JPAQueryFactory에 entityManager 를 주입해서 Bean으로 등록

package me.whitebear.jpa.configuration;

import com.querydsl.jpa.impl.JPAQueryFactory;
import jakarta.persistence.EntityManager;
import jakarta.persistence.PersistenceContext;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class JPAConfiguration {

    @PersistenceContext
    private EntityManager entityManager;

    @Bean
    public JPAQueryFactory jpaQueryFactory(EntityManager entityManager) {
        return new JPAQueryFactory(entityManager);
    }

 

3.RepositoryQuery 인터페이스 생성

public interface TodoRepositoryQuery {

    Optional<Todo> findByIdWithUser(Long todoId);

}

 

4.TodoRepositoryQueryImpl implements TodoRepositoryQuery 클래스 생성 후 JPAQueryFactory 의존성 삽입

이후에 원하는 메서드 쿼리 작성

@RequiredArgsConstructor
public class TodoRepositoryQueryImpl implements TodoRepositoryQuery {

    private final JPAQueryFactory jpaQueryFactory;

    @Override
    public Optional<Todo> findByIdWithUser(Long todoId) {
        Todo result = jpaQueryFactory
                .selectFrom(todo)
                .leftJoin(todo.user, user).fetchJoin()
                .where(todo.id.eq(todoId))
                .fetchOne();

        return Optional.ofNullable(result);
    }
}

 

5.기존 Repository에 RepositoryQuery extends 추가

public interface TodoRepository extends JpaRepository<Todo, Long>, TodoRepositoryQuery {