前言:
最近在公司做一个新闻分页的功能,对分页的功能实现、数据结构也有了简单的了解,在此记录。
- 分页功能逻辑:
分页功能如何实现呢?我们通过自定义一个分页功能类PageList,然后继承Serializable类,其中属性有:(当然还有一堆get、set)
// 总记录数
private int totalCount;
// 总页数
private int totalPageCount;
// 开始查询的页数
private int startPageNo;
// 查询的偏移量【每页查询的最大条数】
private int pageSize;
// 对象集合
private java.util.List<T> list;
public int getTotalCount() {
return totalCount;
}
public void setTotalCount(int totalCount) {
this.totalCount = totalCount;
}
public int getTotalPageCount() {
return totalPageCount;
}
public void setTotalPageCount(int totalPageCount) {
this.totalPageCount = totalPageCount;
}
public int getStartPageNo() {
return startPageNo;
}
public void setStartPageNo(int startPageNo) {
this.startPageNo = startPageNo;
}
public int getPageSize() {
return pageSize;
}
public void setPageSize(int pageSize) {
this.pageSize = pageSize;
}
public List<T> getList() {
return list;
}
public void setList(List<T> list) {
this.list = list;
}
那我们如何使用呢?我们在Controller中用它去包装我们要分页的数据并返回给前端:(例如以下)
PageList<News> pageList = new PageList<>();
pageList.setStartPageNo(pageNo);
pageList.setPageSize(pageSize);
pageList.setTotalCount(totalCount);
pageList.setTotalPageCount((totalCount + pageSize - 1) / pageSize);
pageList.setList(newsList);
前端进行数据整理即可展示
当前要显示的页pageNo,每页显示数量pageSize,总记录数totalCount,总页数totalPageCount,所有记录的内容newsList
- 底层实现
既然实现分页功能,并不是把所有数据都查询出来放在前端去整理,而是后台查询的时候就做了限制。
即我们每次分页查询(换页)的时候都需要在前端把要看那一页(pageNo)这个参数传到后台,而Controller层在拿到参数后在Service层先把所有数据都查询出来,再根据要展示的页面和每页展示的数量(pageSize)去将数据整理(此处代码就不粘了,动脑筋写一下吧)再返回,至此返回前端的数据就是我们想要的该页面的记录。
最后展示:
当然active的样式也是很容易解决的,有什么问题大家可以一起交流的~