Spring Data Jpa 구현 페이지 및 정렬 코드 인스턴스

7451 단어 springjpa
이전에 우리는 Jpa를 사용하여 관계형 데이터베이스에 접근하는 방법을 배웠다.Jpa를 통해 우리는 데이터베이스에 대한 개발 업무를 크게 간소화시켰다.그러나 이전의 예에서 우리는 가장 간단한 CRUD (삭제 수정) 조작만 언급했다.실제로 Spring Data Jpa는 페이지 나누기와 정렬 조회에 완벽한 지원을 하고 있습니다. 다음은 Pageable을 통해 데이터베이스에 대한 페이지 나누기 조회를 하는 방법을 배우겠습니다.
maven 의존 추가
우선 우리는 Jpa를 도입하고 데이터베이스는 hsqldb 메모리 데이터베이스를 직접 사용하면 된다.

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemalocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
 <modelversion>4.0.0</modelversion>
 <parent>
  <groupid>org.springframework.boot</groupid>
  spring-boot-starter-parent</artifactid>
  <version>1.2.5.RELEASE</version>
 </parent>
 <groupid>tmy</groupid>
 demo.jpa.page</artifactid>
 <version>0.0.1-SNAPSHOT</version>
 <name>tmy-spring-jpa-page-demo</name>
 
 <dependencies>
  <dependency>
   <groupid>org.springframework.boot</groupid>
   spring-boot-starter-web</artifactid>
  </dependency>
  <dependency>
   <groupid>org.springframework.boot</groupid>
   spring-boot-starter-data-jpa</artifactid>
  </dependency>
  <dependency>
   <groupid>org.hsqldb</groupid>
   hsqldb</artifactid>
   <scope>runtime</scope>
  </dependency>
 </dependencies>
</project>
Paging AndSorting Repository 상속
Jpa의 기본적인 사용 방법은 Jpa를 사용하여 관계형 데이터베이스에 접근하는 방법에 대해 이미 소개했습니다. 잠시 건너뛰겠습니다. 인터페이스 BlogRepository의 정의를 직접 보겠습니다.

public interface BlogRepository extends PagingAndSortingRepository {
 
 Page findByDeletedFalse(Pageable pageable);
 
}
BlogRepository는 다음과 같은 방법을 정의했습니다. Page findByDeletedFalse(Pageable pageable);,우리는 주로 그것의 매개 변수와 반환 값에 주목한다.
Pageable은 Spring Data 라이브러리에 정의된 인터페이스입니다. 이 인터페이스는 모든 페이지 관련 정보의 추상적인 인터페이스입니다. 이 인터페이스를 통해 우리는 페이지 관련 모든 정보(예를 들어 페이지 넘버, 페이지 사이즈 등)를 얻을 수 있습니다. 그러면 Jpa는 페이지 매개 변수를 통해 페이지 정보가 있는 Sql 문장을 얻을 수 있습니다.
페이지 클래스도 Spring Data가 제공하는 인터페이스입니다. 이 인터페이스는 일부 데이터의 집합과 관련된 다음 데이터, 데이터 총수 등 관련 정보를 표시합니다. 이 인터페이스를 통해 우리는 데이터의 전체 정보(데이터 총수, 총 페이지 수...)를 얻을 수 있습니다.그리고 현재 데이터의 정보(현재 데이터의 집합, 현재 페이지 수 등)
Spring Data Jpa는 명칭 규범을 통해 Sql 문장을 확장하는 데 도움을 줄 뿐만 아니라 Pageable의 매개 변수를 처리하고 pageable 매개 변수를 sql'문구의 조건으로 변환하는 데 도움을 줄 뿐만 아니라 유형이 Page의 반환 값을 처리하는 데도 도움을 줄 것입니다. 반환 값 유형이 Page인 것을 발견하면 Spring Data Jpa는 데이터의 전체 정보, 현재 데이터의 정보, 페이지의 정보를 모두 반환 값에 넣을 것입니다.이렇게 하면 우리는 개성화된 페이지 조회를 편리하게 진행할 수 있다.
Pageable은 추상적인 인터페이스일 뿐이다. 그러면 집에서 내려와서 우리는 어떻게 pageable 대상을 얻는지 배운다.
매개변수를 통해 Pageable 객체 생성
Pageable은 많은 방법을 정의했지만 그 핵심적인 정보는 두 가지밖에 없다. 하나는 페이지별 정보(page,size)이고, 다른 하나는 정렬된 정보이다.Spring Data Jpa는 PageRequest의 구체적인 구현을 제공합니다. 페이지별 정보와 정렬 정보만 제공하면 됩니다.

@RequestMapping(value = "/params", method=RequestMethod.GET)
public Page getEntryByParams(@RequestParam(value = "page", defaultValue = "0") Integer page,
  @RequestParam(value = "size", defaultValue = "15") Integer size) {
 Sort sort = new Sort(Direction.DESC, "id");
 Pageable pageable = new PageRequest(page, size, sort);
 return blogRepository.findAll(pageable);
}
여기서, 우리는 매개 변수를 통해 페이지의 정보를 얻고, Sort와 Direction을 통해 페이지able가 id 역순으로 배열되어야 한다고 알려 줍니다.
여기에서 알 수 있듯이 매개 변수를 통해 하나의 페이지able 대상을 얻는 것은 비교적 번거롭다. 조회 방법이 비교적 많을 때 대량의 중복 코드가 발생한다.이러한 상황을 피하기 위해 Spring Data는 페이지블을 직접 생성하는 방식을 제공합니다.
Pageable 객체 직접 가져오기

@RequestMapping(value = "", method=RequestMethod.GET)
public Page getEntryByPageable(@PageableDefault(value = 15, sort = { "id" }, direction = Sort.Direction.DESC) 
 Pageable pageable) {
 return blogRepository.findAll(pageable);
}
방법의 매개 변수에서 페이지 able 형식의 매개 변수를 직접 정의하기만 하면 스프링이 이 매개 변수를 발견하면 스프링은 자동으로 리퀘스트의 매개 변수에 따라 이 페이지 able 대상을 조립합니다. 스프링이 지원하는 리퀘스트 매개 변수는 다음과 같습니다.
페이지, 몇 페이지, 0부터, 기본값은 0페이지
크기, 페이지당 크기, 기본 20
sort, 정렬 관련 정보는property,property(,ASC|DESC) 방식으로 조직됩니다. 예를 들어sort=firstname &sort=lastname,desc는firstname의 정렬 순서에 따라lastname의 역순으로 정렬됨을 나타냅니다.
이렇게 하면 우리는 url의 매개 변수를 통해 다양화되고 개성화된 조회를 할 수 있고 모든 상황을 위해 다른 방법을 쓸 필요가 없다.
URL을 통해 페이지able을 맞춤형으로 설정하는 것은 매우 편리하지만, 유일한 단점은 아름답지 않다는 것이다. 따라서 페이지able에 기본 설정을 해야 한다. 이렇게 하면 많은 경우에 우리는 간결한 URL을 통해 정보를 얻을 수 있다.
Spring은 @PageableDefault를 제공하여 맞춤형 설정pageable의 기본 설정을 도와줍니다.예를 들어 @PageableDefault(value=15,sort={"id"},direction=Sort.Direction.DESC)는 기본적으로 우리가 id 역순으로 배열한 페이지의 크기가 15라는 것을 나타낸다.
결과 반환
마지막으로, 프로그램의 루트 디렉터리에 들어가서 명령 mvnspring-boot:run을 실행하면 웹 응용 프로그램을 시작합니다. 시작이 완료되면 [http://localhost:8080/](http://localhost:8080/) 페이지에서 다음과 같은 결과를 볼 수 있습니다.

{
 "content":[
 {"id":123,"title":"blog122","content":"this is blog content"},
 {"id":122,"title":"blog121","content":"this is blog content"},
 {"id":121,"title":"blog120","content":"this is blog content"},
 {"id":120,"title":"blog119","content":"this is blog content"},
 {"id":119,"title":"blog118","content":"this is blog content"},
 {"id":118,"title":"blog117","content":"this is blog content"},
 {"id":117,"title":"blog116","content":"this is blog content"},
 {"id":116,"title":"blog115","content":"this is blog content"},
 {"id":115,"title":"blog114","content":"this is blog content"},
 {"id":114,"title":"blog113","content":"this is blog content"},
 {"id":113,"title":"blog112","content":"this is blog content"},
 {"id":112,"title":"blog111","content":"this is blog content"},
 {"id":111,"title":"blog110","content":"this is blog content"},
 {"id":110,"title":"blog109","content":"this is blog content"},
 {"id":109,"title":"blog108","content":"this is blog content"}],
 "last":false,
 "totalPages":9,
 "totalElements":123,
 "size":15,
 "number":0,
 "first":true,
 "sort":[{
 "direction":"DESC",
 "property":"id",
 "ignoreCase":false,
 "nullHandling":"NATIVE",
 "ascending":false
 }],
 "numberOfElements":15
}

검색 결과를 통해 알 수 있습니다.
id 역순으로 배열된 10개 데이터
현재 페이지는 마지막 페이지가 아니라 뒤에 데이터가 있습니다.
모두 9페이지가 있다
페이지당 크기는 15
현재 페이지는 0페이지
현재 페이지는 첫 번째 페이지입니다.
현재 페이지는 id 역순으로 배열되어 있습니다
현재 페이지는 모두 15개의 데이터가 있다
어때, 정보가 풍부하지, 코드가 간단하지, 빨리 Jpa의 페이지 조회를 시도해 보자.
이상은 본문의 전체 내용입니다. 여러분의 학습에 도움이 되고 저희를 많이 응원해 주십시오.

좋은 웹페이지 즐겨찾기