본문 바로가기
Spring

[TIL] 240106 Spring Data JPA 파해치기

by studymode 2024. 1. 6.

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