💻 개발 일지/SpringBoot
[22.03.09] QueryDSL
점이
2022. 3. 9. 17:36
반응형
[ 정의 ]
정적 타입을 이용해서 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의 생성자를 기반으로 바인딩
- 값을 넘길 때, 생성자와 순서를 일치시켜야 함
반응형