分页工具一Pageable与Page
欢迎光临我的博客[http://poetize.cn],前端使用Vue2,聊天室使用Vue3,后台使用Spring Boot
import org.springframework.data.domain.Pageable;
import org.springframework.data.domain.Page;
1.Pageable概述
Page<User> findByAge(int age, Pageable pageable);
Pageable 是Spring Data库中定义的一个接口,用于构造翻页查询,是所有分页相关信息的一个抽象,通过该接口,我们可以得到和分页相关所有信息(例如pageNumber、pageSize等),这样,Jpa就能够通过pageable参数来得到一个带分页信息的Sql语句。
2.Pageable实现:PageRequest
静态方法获取对象
static PageRequest of(int page, int size)
与static PageRequest of(int page, int size, Sort sort)
3.直接获取Pageable对象
我们只需要在方法的参数中直接定义一个pageable类型的参数,当Spring发现这个参数时,Spring会自动的根据request的参数来组装该pageable对象
Spring支持的request参数如下:
- page,第几页,从0开始,默认为第0页
- size,每一页的大小,默认为20
- sort,排序相关的信息,例如sort=firstname&sort=lastname,desc表示在按firstname正序排列基础上按lastname倒序排列
@RequestMapping("list")
public Page<T> getEntryByPageable(@PageableDefault(value = 15, sort = { "id" }, direction = Sort.Direction.DESC)
Pageable pageable) {
return dao.findAll(pageable);
}
四.Pageable接口
public interface Pageable {
//返回要返回的页面.
int getPageNumber();
// 返回要返回的项目的数量。
int getPageSize();
//根据底层页面和页面大小返回偏移量。
int getOffset();
//返回排序参数。
Sort getSort();
}
五.Page接口
Page<User> findByAge(int age, Pageable pageable);
用于储存查询的结果集
public interface Page<T> extends Iterable<T> {
int getNumber(); //当前第几页,总是非负的
int getSize(); //@常用:返回当前页面的大小。
int getTotalPages(); //@常用:返回分页总数。
int getNumberOfElements(); //返回当前页上的元素数。
long getTotalElements(); //@常用:返回元素总数。
boolean hasPreviousPage(); //返回如果有上一页。
boolean isFirstPage(); //返回当前页是否为第一页。
boolean hasNextPage(); //返回如果有下一页。
boolean isLastPage(); //返回当前页是否为最后一页。
Iterator<T> iterator();
List<T> getContent(); //@常用:将所有数据返回为List
boolean hasContent(); //返回数据是否有内容。
Sort getSort(); //返回页的排序参数。
}
六.Page接口实现PageImpl
构造函数PageImpl(List<T> content)
与PageImpl(List<T> content, Pageable pageable, long total)
成员方法
List<T> getContent()
Pageable getPageable()
long getTotalElements()
int getTotalPages()
Sort getSort()
int getSize()
七.使用
@GetMapping("/showMarkerByPage/{page}")
public Result showMarkerController(@PathVariable("page") int page){
PageRequest pageRequest = PageRequest.of(page, 5);
Page<Marker> markerPage = markerService.findMarker(pageRequest);
for (int i = 0; i < markerPage.getContent().size(); i++) {
System.out.println(markerPage.getContent().get(i));
System.out.println(markerPage.getTotalElements());
}
if (markerPage.getContent()!=null) {
return ResultUtil.success(markerPage.getContent(), "/showMarker");
}else {
return ResultUtil.error(1, "查询失败", "/showMarker");
}
}