之前用SpringBoot+Mybatis可以很好的实现分页查询的功能,因为PageHelper只支持在Mybtis中使用,但是项目里不是用mybatis框架,于是自己用Java手动实现了分页查询的功能。
一、分析思路
假设每页展示10条数据,当我们展示第一页的数据的时候,展示前10条数据;点击第二页的时候,展示11-20的数据,依次类推,其实核心的部分是我们需要对取得的所有数据根据pageSize(每页显示页数)和pageNum(当前页数)计算出每一页的开始下标和结束下标,我们就可以轻松实现分页。
二、具体实现
1、创建需要分页的Page对象
import com.constants.GlobalConstant;
import lombok.Data;
import java.io.Serializable;
import java.util.List;
/**
* 分页通用类
*/
@Data
public class PageBean<T> implements Serializable {
private int pageNum;//当前页数
private int pageSize = GlobalConstant.PAGE_SIZE;//每页显示数,这里是10
private int totalPage;//总页数
private int totalRecord;//总的记录数
private List<T> data;//当前页面的数据集合
private int start;
private int end;
public PageBean(int pageNum, int pageSize, int totalRecord){
this.pageNum = pageNum;
this.totalRecord = totalRecord;
//计算总页数
if (totalRecord % pageSize == 0){
this.totalPage = totalRecord / pageSize;
}else {
this.totalPage = totalRecord / pageSize + 1;
}
//这里是核心,计算每页的起始下标
this.start = (pageNum - 1) * pageSize;
this.end = this.start + pageSize;
}
}
2、控制层-Controller
@GetMapping("/getGlobalPersonPage")
@ApiOperation("根据全局参数获取成都或者地市——拓展商户排名数据——分页")
public PageBean<PersonWeekData> getGlobalPersonPage(@RequestParam(name="globalParam") @ApiParam(name = "globalParam", value = "全局参数,成都还是地市") String globalParam,
@RequestParam(name="pageNum") @ApiParam(name = "pageNum", value = "全局参数,成都还是地市") int pageNum){
String weekTimeStr = MyUtils.getWeekTimeStr();
PageBean<PersonWeekData> result = globalService.getGlobalPersonPage(globalParam, weekTimeStr, pageNum);
return result;
}
3、实现层-Imp
@Service("globalService")
public class GlobalServiceImpl implements GlobalService {
@Override
public PageBean<PersonWeekData> getGlobalPersonPage(String globalParam, String weekTimeStr, int pageNum) {
//获取所有拓展人也就是市场人员的数据-默认展示10个拓展人,剩下的拓展人数据为收缩状态,一共展示20个拓展人数据数据
List<PersonWeekData> personWeekDataList = personResultDao.getAllPersonDataByGlobalParamAndWeekTime(globalParam, weekTimeStr);
int size = 0;
if (!CollectionUtils.isEmpty(personWeekDataList)){
size = personWeekDataList.size();
}
PageBean<PersonWeekData> pageBean = new PageBean<>(pageNum, GlobalConstant.PAGE_SIZE, size);
List<PersonWeekData> data = new ArrayList<>();
for (int i = pageBean.getStart(); i < pageBean.getEnd(); i++) {
data.add(personWeekDataList.get(i));
}
pageBean.setData(data);
return pageBean;
}
}
4、数据返回
![](https://pic.downk.cc/item/5fae48de1cd1bbb86b970ad8.jpg)
三、总结
综上所述,其实分页功能的实现很简单,哈哈哈,关键是要把基本思路和原理想清楚,然后自己再去手动实现一遍哦。