정적 타입을 이용해서 SQL등의 쿼리를 생성해주는 프레임워크 → 쿼리를 자바코드로 작성할 수 있게 도와줌
- Spring Data JPA로 해결하지 못하는 쿼리 해결 가능
- 코드로 쿼리를 작성함으로써, 컴파일 시점에 문법 오류를 쉽게 확인
- 결과적으로, QueryDsl로 작성한 코드는 JPQL이 됨
@Configuration
public class QueryDslConfig {
@Bean
public JPAQueryFactory jpaQueryFactory(EntityManager em){
return new JPAQueryFactory(em);
}
}
JPAQueryFactory빈을 등록 → QueryRepository에서 사용
@Repository
@RequiredArgsConstructor
@Transactional(readOnly = true)
public class TodoQueryRepositoryImpl implements TodoQueryRepository{
private final JPAQueryFactory query;
@Override
public List<FindTodoResDto> findAllWithUserId(Long userSeq) {
return query
.select(Projections.constructor(FindTodoResDto.class,
todo.seq,
todo.title,
todo.content))
.from(todo)
.innerJoin(todo.userTodos, userTodo)
.where(userTodo.user.seq.eq(userSeq)
.and(todo.team.isNull()))
.fetch();
}
}
UserSeq를 이용하여 User가 가지고 있는 개인 Todo를 가져옴