前言
我一直对前端显示列表有什么误解,一直觉得不需要总数也可以实现分页。但事实却是是不太可以的。
于是开始研究到底如何返回数据总条数。
最初是自己实现分页逻辑。但是发现一旦要分页的结果不是简单的select *,而是涉及数据的group等操作,自己实现就开始变的麻烦起来。
那为什么不找开源实现呢?于是就找到了PageHelper..
使用步骤
1. 引入依赖
因为是springboot程序,所以引入下面的依赖就可以了。如果不是springboot程序,下面依赖恐怕是不可以的
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper-spring-boot-starter</artifactId>
<version>1.2.10</version>
</dependency>
2.application.properties文件中配置SQL方言
pagehelper.helper-dialect=mysql
3.sql
<select id="testPageLine" resultType="com.alibaba.fastjson.JSONObject">
select * from bg_line
</select>
4. java代码
代码非常简单。比如在controller里面写:
@PostMapping(value = "/test")
public AjaxResult<JSONObject> testPage(Integer pageNum, Integer pageSize){
//pageNum页数,pageSize每页的数据行数
PageHelper.startPage(pageNum, pageSize);
//这里查询到的就是按上面分页条件查询到的结果,虽然看起来好像并没有传入任何分页逻辑
List<JSONObject> data = lineService.testPageLine();
//info对象中包含结果总行数,注意是满足条件的总行数,并不是分页对应的行数
PageInfo<JSONObject> info = new PageInfo<>(data);
LOG.info(+"满足条件的总数:"+info.getTotal());
//将详细数据和总条数进行返回
JSONObject res = new JSONObject();
res.put("res",data);
res.put("total",info.getTotal());
return AjaxResult.success(res);
}
总结
上面逻辑很简单,应该没啥好说的,但是我还是踩了一个坑。
在mapper文件中写SQL的时候一定不要写分号,否则pagehelper插件在拼接条件的时候很容易出错。也就是他会在分号后面拼接limit,程序会报SQL语法异常的错误。