본문 바로가기

Back-End/QueryDSL

Spring Data Jpa와 QueryDSL

스프링 데이터 JPA에서 Repository를 생성하면 이럴 것이다.

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

하지만 QueryDSL도 추가하고 싶다면 사용자 정의 리포지토리를 사용하면 된다.

1. 사용자 정의 인터페이스 작성

public interface TodoRepositoryCustom {
    Optional<Todo> findByIdWithUser(Long todoId); // 예제
}

2. 사용자 정의 인터페이스 구현

public class TodoRepositoryCustomImpl implements TodoRepositoryCustom {

    private final JPAQueryFactory queryFactory;

    public TodoRepositoryCustomImpl(EntityManager em) {
        this.queryFactory = new JPAQueryFactory(em);
    }

    QTodo todo = QTodo.todo;
    QUser user = QUser.user;

    // 1. 바로 엔티티를 반환해주는 쿼리문
    @Override
    public Optional<Todo> findByIdWithUser(Long todoId) {
        Todo result = queryFactory
                .selectFrom(todo)
                .leftJoin(todo.user, user).fetchJoin()
                .where(todo.id.eq(todoId))
                .fetchOne();

        return Optional.ofNullable(result);
    }
}

3. 스프링 데이터 리포지토리에 사용자 정의 인터페이스 상속

public interface TodoRepository extends JpaRepository<Todo, Long>, TodoRepositoryCustom {
}

 

'Back-End > QueryDSL' 카테고리의 다른 글

QueryDSL 중급 문법  (0) 2025.01.17
JPQL을 QueryDSL로 바꿔보자!  (0) 2025.01.17
QueryDsl 기본 문법  (1) 2024.12.31
QueryDsl 3.x 설정  (0) 2024.12.29