반응형
[ 정의 ]
정적 타입을 이용해서 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의 생성자를 기반으로 바인딩
- 값을 넘길 때, 생성자와 순서를 일치시켜야 함
반응형
'💻 개발 일지 > SpringBoot' 카테고리의 다른 글
SpringBoot - Slack Bot 연동하기 (0) | 2022.04.05 |
---|---|
[Error] org.mockito.exceptions.misusing.UnnecessaryStubbingException: Unnecessary stubbings detected. (0) | 2022.03.27 |
[Test] SpringBoot Test - Service (Mockito) (0) | 2022.03.27 |
[22.03.04] Service, Controller 작성 (0) | 2022.03.07 |
[22.03.03] Entity 생성 및 Repository 테스트 (0) | 2022.03.07 |