在Java中實(shí)現(xiàn)Pageable接口,通常是為了處理分頁(yè)數(shù)據(jù)
CustomPageRequest
的類(lèi):import org.springframework.data.domain.Pageable;
import org.springframework.data.domain.Sort;
public class CustomPageRequest implements Pageable {
private int page;
private int size;
private Sort sort;
public CustomPageRequest(int page, int size) {
this.page = page;
this.size = size;
}
public CustomPageRequest(int page, int size, Sort sort) {
this.page = page;
this.size = size;
this.sort = sort;
}
@Override
public int getPageNumber() {
return page;
}
@Override
public int getPageSize() {
return size;
}
@Override
public long getOffset() {
return (long) page * size;
}
@Override
public Sort getSort() {
return sort;
}
@Override
public Pageable next() {
return new CustomPageRequest(getPageNumber() + 1, getPageSize(), getSort());
}
// ... 其他方法
}
findAll
的方法,該方法接受一個(gè)CustomPageRequest
對(duì)象作為參數(shù),并返回一個(gè)分頁(yè)的結(jié)果:import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageImpl;
import org.springframework.stereotype.Service;
import java.util.List;
@Service
public class MyService {
// ... 其他代碼
public Page<MyEntity> findAll(CustomPageRequest pageRequest) {
// 獲取分頁(yè)參數(shù)
int page = pageRequest.getPageNumber();
int size = pageRequest.getPageSize();
Sort sort = pageRequest.getSort();
// 查詢(xún)數(shù)據(jù)庫(kù)并獲取分頁(yè)數(shù)據(jù)
List<MyEntity> entities = myRepository.findAll(page, size, sort);
// 計(jì)算總記錄數(shù)(這里需要查詢(xún)數(shù)據(jù)庫(kù))
long totalElements = myRepository.count();
// 創(chuàng)建并返回分頁(yè)結(jié)果
return new PageImpl<>(entities, pageRequest, totalElements);
}
}
findAll
方法,并將分頁(yè)請(qǐng)求傳遞給它:import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class MyController {
@Autowired
private MyService myService;
@GetMapping("/my-entities")
public Page<MyEntity> getMyEntities(@RequestParam("page") int page,
@RequestParam("size") int size,
@RequestParam(value = "sort", required = false) String sort) {
CustomPageRequest pageRequest = new CustomPageRequest(page, size, Sort.by(sort));
return myService.findAll(pageRequest);
}
}
現(xiàn)在,當(dāng)客戶(hù)端發(fā)送一個(gè)包含分頁(yè)參數(shù)的請(qǐng)求時(shí),你的應(yīng)用程序?qū)⒎祷胤猪?yè)的數(shù)據(jù)。