Spring

[TIL] 240106 Spring Data JPA 파해치기

studymode 2024. 1. 6. 16:48

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의 줄임말로 주로 인터페이스를 구현하는 구현체 이름에 주로 쓰임