JPA - Querydsl 사용법 및 실습

2024. 10. 4. 14:36·Java & Spring/Spring

1. build.gradle 설정

dependencies {

    implementation 'com.querydsl:querydsl-jpa:5.0.0:jakarta'
    annotationProcessor "com.querydsl:querydsl-apt:${dependencyManagement.importedProperties['querydsl.version']}:jakarta"
    annotationProcessor "jakarta.annotation:jakarta.annotation-api"
    annotationProcessor "jakarta.persistence:jakarta.persistence-api"
}

// Querydsl 설정부
def generated = 'src/main/generated'

tasks.withType(JavaCompile).configureEach {
    options.getGeneratedSourceOutputDirectory().set(file(generated))
}

clean {
    delete file (generated)
}

 

2. gradle실행(clean -> build)

 

3. QClass 생성 확인

 

4. JpaRepository와 함께 사용하기 위해 JPAQueryFactory Bean등록

@Configuration
public class QueryDslConfig {

    @PersistenceContext
    private EntityManager entityManager;

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

 

※ 아래 JPQL코드를 QueryDsl을 사용하여 실행해보려고한다.

 public interface TodoRepository extends JpaRepository<Todo, Long>, CustomTodoRepository {
    @Query("SELECT t FROM Todo t " +
            "LEFT JOIN t.user " +
            "WHERE t.id = :todoId")
    Optional<Todo> findByIdWithUser(@Param("todoId") Long todoId);
    }

 

1. CustomTodoRepository interface 구현

public interface CustomTodoRepository {
    Optional<Todo> findByIdWithUser(Long todoId);
}

 

2. TodoRepositoryImpl 구현

import static org.example.expert.domain.todo.entity.QTodo.todo;
import static org.example.expert.domain.user.entity.QUser.user;

@RequiredArgsConstructor
public class TodoRepositoryImpl implements CustomTodoRepository{

    @Autowired
    private final JPAQueryFactory jpaQueryFactory;

    @Override
    public Optional<Todo> findByIdWithUser(Long todoId) {
        return Optional.ofNullable(
                jpaQueryFactory
                        .selectFrom(todo)
                        .leftJoin(todo.user, user).fetchJoin()
                        .where(todo.id.eq(todoId))
                        .fetchOne()
        );
    }
}
  • JPAQueryFactory를 @Autowired해준다.
  • QClass들을 import해준다.
  • Optional.ofNullable()로 감싸서 null에 대한 처리를 한다.
  • jpqQueryFactory를 사용해서 쿼리문을 작성한다.
  • fetchJoin()을 사용해서 N+1문제를 예방한다.

'Java & Spring > Spring' 카테고리의 다른 글

스프링 MVC - 웹 애플리케이션의 이해  (0) 2025.04.06
Spring - Spring Security  (0) 2024.10.07
JPA - JPQL사용해보기  (2) 2024.10.02
JPA - 쿼리 파일 만들기  (2) 2024.09.27
JPA - 데이터베이스와 SQL  (4) 2024.09.26
'Java & Spring/Spring' 카테고리의 다른 글
  • 스프링 MVC - 웹 애플리케이션의 이해
  • Spring - Spring Security
  • JPA - JPQL사용해보기
  • JPA - 쿼리 파일 만들기
DJ.Kang
DJ.Kang
백엔드 개발 기록 블로그
  • DJ.Kang
    DJ Hello World
    DJ.Kang
  • 전체
    오늘
    어제
    • 분류 전체보기
      • 이론공부
      • 시스템설계
      • Java & Spring
        • TIL
        • 트러블슈팅
        • 고도화
        • 알고리즘
        • 코딩테스트
        • Java
        • Spring
        • Thymeleaf
      • 프로젝트
        • coin-trading
        • 트러블슈팅
      • Docker
      • DB
      • AWS
      • CI-CD
      • 웹
      • git & github
      • 구인공고분석
  • 블로그 메뉴

    • 홈
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    java 멤버
    java two-pointer
    데이터 타입
    프로그래머스 java 기초트레이닝
    java arrays.copyofrnage()
    프로그래머스 java 기초 트레이닝
    자료구조
    Java 생성자
    java 메서드
    java
    java 세수의합
    java 유클리드 호제법
    Java this
    java 에라토스테네스의 체
    java 제어자
    개발로드맵
    java enhance switch
    java기초
    java super
    데이터 크기
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.1
DJ.Kang
JPA - Querydsl 사용법 및 실습
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.