QueryDSL

이정음·2022년 4월 15일
0

SpringBoot

목록 보기
3/7

[ 정의 ]

정적 타입을 이용해서 SQL등의 쿼리를 생성해주는 프레임워크 → 쿼리를 자바코드로 작성할 수 있게 도와줌

  • Spring Data JPA로 해결하지 못하는 쿼리 해결 가능
  • 코드로 쿼리를 작성함으로써, 컴파일 시점에 문법 오류를 쉽게 확인
  • 결과적으로, QueryDsl로 작성한 코드는 JPQL이 됨

[ QueryDSL Config 설정 ]

@Configuration
public class QueryDslConfig {
    @Bean
    public JPAQueryFactory jpaQueryFactory(EntityManager em){
        return new JPAQueryFactory(em);
    }
}

JPAQueryFactory빈을 등록 → QueryRepository에서 사용

[ Query Repository 생성 ]

@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를 가져옴

Projections.constructor

  • DTO의 생성자를 기반으로 바인딩
  • 값을 넘길 때, 생성자와 순서를 일치시켜야 함
profile
코드먹는 하마

0개의 댓글