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 {
'개발 > 부트캠프' 카테고리의 다른 글
본캠프 : JWT Stateless Spring Security (0) | 2025.03.17 |
---|---|
본캠프 : JwtFilter - ArgumentResolver 실습 2(OncePerRequestFilter) (0) | 2025.03.14 |
본캠프 : 테이블 객체끼리 관계만들기 2 (0) | 2025.03.12 |
본캠프 : 테이블 객체끼리 관계만들기 1 (0) | 2025.03.12 |
본캠프 : AOP(Aspect-Oriented Programming) (0) | 2025.03.12 |