Spring Data Jpa 구현 페이지 및 정렬 코드 인스턴스
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의 페이지 조회를 시도해 보자.
이상은 본문의 전체 내용입니다. 여러분의 학습에 도움이 되고 저희를 많이 응원해 주십시오.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
thymeleaf로 HTML 페이지를 동적으로 만듭니다 (spring + gradle)지난번에는 에서 화면에 HTML을 표시했습니다. 이번에는 화면을 동적으로 움직여보고 싶기 때문에 입력한 문자를 화면에 표시시키고 싶습니다. 초보자의 비망록이므로 이상한 점 등 있으면 지적 받을 수 있으면 기쁩니다! ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.