一、准备数据库
实现一个分页查询接口返问数据库中的数据
二、配置分页插件
在config包下创建MyBatisConfig类
@SpringBootConfiguration代表该类下的方法交给spring boot管理让其自动执行
@SpringBootConfiguration
public class MyBatisConfig {
@Bean
public PaginationInterceptor paginationInterceptor(){
PaginationInterceptor paginationInterceptor = new PaginationInterceptor();
paginationInterceptor.setCountSqlParser(new JsqlParserCountOptimize(true));
return paginationInterceptor;
}
}
三、controller下实现代码
pageNum和pageSize是前端需要传的参数
pageNum:第几页
pageSize:每页展示几条数据
usersService.page是插件提供分页方法
CommonResult.success是上篇文章讲到封装的状态码的方法
@RequestMapping(value = "/list",method = RequestMethod.GET)
public CommonResult listUsers(@RequestParam(value = "pageNum", defaultValue = "1") Integer pageNum,
@RequestParam(value = "pageSize", defaultValue = "10") Integer pageSize){
Page page = new Page(pageNum, pageSize);
Page usersPage = usersService.page(page);
return CommonResult.success(usersPage);
四、启动程序后,使用postman发起请求
如下图,查询第二页的数据,每页显示3条数据
五、分析返回内容
其中,以下参数是插件提供,看起来不符合使用习惯,所以对返回参数再进行下封装
- “total”: 20, //总条数
- “size”: 3, //每页显示三条数据
- “current”: 2, //查询第二页的数据
- “orders”: [], //
- “optimizeCountSql”: true,
- “hitCount”: false,
- “searchCount”: true,
- “pages”: 7 //总页数
返回参数
{
"code": 200,
"message": "操作成功",
"data": {
"records": [
{
"name": "马超",
"yname": "123",
"abbr": "丹丹",
"role": "TE",
"sex": "女",
"team": "B组",
"mail": "123",
"dspNo": 2
},
{
"name": "猴子",
"yname": "123",
"abbr": "小宏",
"role": "TE",
"sex": "女",
"team": "A组",
"mail": "123",
"dspNo": 3
},
{
"name": "八戒",
"yname": "123",
"abbr": "小娟",
"role": "TE",
"sex": "女",
"team": "A组",
"mail": "123",
"dspNo": 4
}
],
"total": 20,
"size": 3,
"current": 2,
"orders": [],
"optimizeCountSql": true,
"hitCount": false,
"searchCount": true,
"pages": 7
}
}
六、封装返回参数
common下创建一个CommonPage
由于我们这里定义的是Integer,插件使用的是long,所以这里使用了Convert.toInt
使用lombok提供的set方法修改私有属性
@Getter@Setter
public class CommonPage<T> {
private Integer pageNum; //第几页
private Integer pageSize; //一页展示几条数据
private Integer totalPage; //总页数
private long total; //总条数
private List<T> list; //数据
public static <T> CommonPage<T> restPage(Page<T> pageRsult) {
CommonPage<T> page = new CommonPage<T>();
page.setPageNum(Convert.toInt(pageRsult.getCurrent()));
page.setPageSize(Convert.toInt(pageRsult.getSize()));
page.setTotalPage(Convert.toInt(pageRsult.getTotal()/pageRsult.getSize() + 1));
page.setTotal(pageRsult.getTotal());
page.setList(pageRsult.getRecords());
return page;
}
}
七、修改controller下的方法
只需修改return CommonResult.success()里面的参数即可
@RequestMapping(value = "/list",method = RequestMethod.GET)
public CommonResult listUsers(@RequestParam(value = "pageNum", defaultValue = "1") Integer pageNum,
@RequestParam(value = "pageSize", defaultValue = "10") Integer pageSize){
Page page = new Page(pageNum, pageSize);
Page usersPage = usersService.page(page);
// return CommonResult.success(usersPage);
return CommonResult.success(CommonPage.restPage(usersPage));
八、再次使用Postman发起请求
可以看到返回了自定义的参数