스프링 데이터 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 |