Spring Boot 实现分页查询 – pagehelper
接上一节 Spring Boot 整合 Mybatis,与数据库交互 上面有个方法是查询所有用户列表,这里要考虑一个问题了:如果数据库表数据量特别大,然后发送一个查询所有列表的请求,响应超时是肯定的了,后台一下子返回这么大的数据,有可能导致整个服务挂起。解决这个问题的方法就是禁止查询所有列表,实现分页查询,设置默认分页参数。
Java version:1.8+
Maven:3.3+,我这里使用的 3.5.3
SpringBoot:2.0.7.RELEASE
IDE开发工具:IDEA 专业版。
Step1:添加分页插件依赖包:
<!-- 分页插件 -->
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper-spring-boot-starter</artifactId>
<version>1.2.5</version>
</dependency>
Step2:在application.properties中添加参数:
# pagehelper配置
pagehelper.helper-dialect=mysql
pagehelper.reasonable=true
pagehelper.support-methods-arguments=true
pagehelper.params="count=countSql"
pagehelper.returnPageInfo=check
Step3:在UserService接口中添加方法:
//添加分页查询方法
PageInfo<User> findAllUsers(int page, int pagesize);
//方法二
Page<User> findAllUserInfo(int page, int pagesize);
实现类UserServiceImpl:
@Override
public PageInfo<User> findAllUsers(int page, int pagesize) {
//将参数传给这个方法就可以实现物理分页了,非常简单。
PageHelper.startPage(page, pagesize);
List<User> users = userMapper.selectAllUsers();
// PageInfo<User> all = new PageInfo<>(users);
return new PageInfo<>(users);
}
//方法二
@Override
public Page<User> findAllUserInfo(int page, int pagesize) {
// Page<User> resultlist = PageHelper.startPage(page, pagesize, true)
// .doSelectPage(new ISelect() {
// @Override
// public void doSelect() {
// userMapper.selectAllUsers();
// }
// });
//上述匿名函数改成 lambda表达式
Page<User> resultlist = PageHelper.startPage(page, pagesize, true)
.doSelectPage(() -> userMapper.selectAllUsers());
return resultlist;
}
Step4:UserController
//分页查询
@GetMapping("/pagehelper")
public Object findAllUsers(
@RequestParam(name = "page", required = false, defaultValue = "1")
int page,
@RequestParam(name = "pagesize", required = false, defaultValue = "2")
int pagesize) {
// return userService.findAllUsers(page, pagesize);
return userService.findAllUserInfo(page, pagesize);
}
默认参数是从第1页开始,一页返回2条数据,可以根据情况修改上述参数。
Step5:测试(推荐一个Chrome插件:基于REST的web服务客户端
,POSTman软件的插件版)
可以使用默认参数,也可以使用 “page”、“pagesize” 参数的自由组合进行查询。
推荐阅读:
本文首发于 turbobin’s Blog 。转载请注明出处,附上本原文链接, 谢谢合作。
关注微信公众账号「曹当家的」,订阅最新文章推送