Spring Data 구조
스피링 데이터 Common과 스프링 데이터 JPA를 주로 사용
만약 Spring Data Jpa를 사용하지 않으면 순수 Jpa로 개발해야함.
entity manager불러와서 persist 이런 식으로
JPA Repository 제한 하는 법
@RepositoryDefinition을 붙이는 것이 가장 많이 사용됨
인터페이스에 에너테이션을 붙인 뒤, 사용할 기능만 명시
pageDto.toPageable
Pageable과 실제 페이지 사이의 -1문제를 해결하기 위해 PageDTO를 만들어서 해결
public class PageDTO {
@Positive // 0보다 큰수
private Integer currentPage;
private Integer size;
private String sortBy;
public Pageable toPageable() {
return PageRequest.of(currentPage-1, size, Sort.by(sortBy).descending());
}
}
// UserService 일부
public List<User> findAll(PageDTO pageDTO){
return userRepository.findUsers(pageDTO.toPageable());
}
Pageable을 GET API의 요청필드로 받아오기
@GetMapping("/users")
public Page<User> getAllUsers(Pageable pageable) {
return userRepository.findAll(pageable);
}
http://localhost:8080/users?page=0
- 0번 페이지 부터 20개(default) 조회한다.
http://localhost:8080/users?page=0&size=5
- 0번 페이지부터 5개 조회한다.
http://localhost:8080/users?page=0&size=5&sort=id.desc
- 0번 페이지부터 5개 조회 하는데, id 의 역순으로 조회한다.
Pageable은 Spring Data에서 제공하는 페이징과 관련된 객체로,
자동으로 쿼리 매개변수를 해석하여 페이징된 결과를 받아오기 위해 사용됨
이를 통해 @RequestParam 어노테이션을 직접 사용하지 않고도 페이징 관련 정보를 전달할 수 있습니다.
(출처: 챗지피티)
QuerydslPredicateExecutor
spring data jpa에서 제공하는 인터페이스
쿼리 dsl을 사용하여 동적 쿼리를 실행하는데 사용
리포지토리에서 Predicate 객체를 사용하여 동적인 쿼리를 작성할 수 있다
(요건 다시 복습해봐야지!!)
소소한 지식 쌓기
Impl은 implement의 줄임말로 주로 인터페이스를 구현하는 구현체 이름에 주로 쓰임
'Spring' 카테고리의 다른 글
[TIL] 240109 최종 프로젝트 ResponseDto 오류 해결, git stash (0) | 2024.01.09 |
---|---|
[트러블슈팅] 240109 ResponseDto는 Entity로 받지 않기!! (1) | 2024.01.09 |
[TIL] 240106 Serialize (0) | 2024.01.06 |
[TIL] 240105 spring 심화 개인과제 피드백 (3) | 2024.01.05 |
[TIL] 231228 REST API 개념 정리 (0) | 2023.12.28 |