PageHelper在springboot中的使用方式
作者:知识浅谈
这篇文章主要介绍了PageHelper在springboot中的使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
PageHelper的使用方法
第一步、导入相对应的坐标和包
<dependency> <groupId>com.github.pagehelper</groupId> <artifactId>pagehelper-spring-boot-starter</artifactId> <version>${pagehelper.version}</version> </dependency>
第二步、配置文件的配置
pagehelper: helper-dialect: mysql reasonable: true support-methods-arguments: true params: count=countsql
参数解释:
- helper-dialect:指定数据库,不指定的话会默认自动检测数据库类型
- reasonable:是否启用分页合理化。如果启用,当pagenum<1时,会自动查询第一页的数据,当pagenum>pages时,自动查询最后一页数据;不启用的,以上两种情况都会返回空数据
- support-methods-arguments:默认值false,分页插件会从查询方法的参数值中,自动根据上面 params 配置的字段中取值,查找到合适的值时就会自动分页。(copy来的,因为我也不知道怎么去解释)
- params:用于从对象中根据属性名取值, 可以配置 pageNum,pageSize,count,pageSizeZero,reasonable,不配置映射的用默认值, 默认值为pageNum=pageNum;pageSize=pageSize;count=countSql;reasonable=reasonable;pageSizeZero=pageSizeZero
第三步、方法调用
使用PageHelper.startPage 静态方法调用startPage :
特点:
1.静态方法,传递两个参数(当前页码,每页查询条数)
2.使用pageHelper 分页的时候,不再关注分页语句,查询全部的语句
3.自动的对PageHelper.startPage 方法下的第一个sql 查询进行分页
PageHelper.startPage(1,5); //紧跟着的第一个select 方法会被分页 List list = countryMapper.findAll();
也就是说再Service层PageHelper.startPage(1,5);语句后一定是紧跟查询语句。
- 方法一:使用service查询到的结果存储在request域中
private void selectAllUsers(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String num=request.getParameter("num"); if(null==num) { num="1"; } // Page PageInfo Page<?> page=PageHelper.startPage(Integer.parseInt(num),5); //设置第几条记录开始,多少条记录为一页 //通过userService获取user的信息,其sql语句为"select * from user" 但因pagehelp已经注册为插件,所以pagehelp会在原sql语句上增加limit,从而实现分页 List<Person> persons=userService.getAllUsersBypageHelper(); //因而获得的是分好页的结果集 PageInfo<?> pageHelper=page.toPageInfo(); //获取页面信息的对象,里面封装了许多页面的信息 如:总条数,当前页码,需显示的导航页等等 request.setAttribute("persons",persons); request.setAttribute("pagehelper",pageHelper); request.getRequestDispatcher("/persons.jsp").forward(request,response); }
- 方法二:使用service查询到的结果存储在自定义的类中然后返回给前端
public PageResult<List<ProjectListVO>> queryByProjectName(Integer pageNo, Integer pageSize, String projectName) { PageResult<List<ProjectListVO>> result = new PageResult<>(); try { PageHelper.startPage(pageNo, pageSize); List<ProjectListVO> projectVOList = projectMapper.queryByProjectName(projectName); //设置完上边的PageHelper之后查询的时候,查询语句会自动加入 limits startpage count,查询结果就是正确的结果 PageInfo<ProjectListVO> pageInfo = new PageInfo<>(projectVOList); result.setTotal(pageInfo.getTotal()); result.setPages(pageInfo.getPages()); result.setCurrent(pageInfo.getPageNum()); result.setSize(pageInfo.getPageSize()); result.setResult(projectVOList); result.success("查询成功!"); } finally { PageHelper.clearPage(); } return result; }
关于PageInfo这个类,源码如下:
public class PageInfo implements Serializable { private static final long serialVersionUID = 1L; //当前页 private int pageNum; //每页的数量 private int pageSize; //当前页的数量 private int size; //由于startRow 和endRow 不常用,这里说个具体的用法 //可以在页面中"显示startRow 到endRow 共size 条数据" //当前页面第一个元素在数据库中的行号 private int startRow; //当前页面最后一个元素在数据库中的行号 private int endRow; //总记录数 private long total; //总页数 private int pages; //结果集 private List list; //前一页 private int prePage; //下一页 private int nextPage; //是否为第一页 private boolean isFirstPage = false; //是否为最后一页 private boolean isLastPage = false; //是否有前一页 private boolean hasPreviousPage = false; //是否有下一页 private boolean hasNextPage = false; //导航页码数 private int navigatePages; 传智播客——专注于Java、.Net 和Php、网页平面设计工程师的培训 北京市昌平区建材城西路金燕龙办公楼一层电话:400-618-9090 //所有导航页号 private int[] navigatepageNums; //导航条上的第一页 private int navigateFirstPage; //导航条上的最后一页 private int navigateLastPage; }
第四步、关于controller中的使用
- 对于上边的方法一:前端的页面中可以直接从request域中获取相对应的结果。
- 对于上边的方法二:
@ApiOperation("根据项目名查询项目信息") @RequestMapping(value = "/queryByProjectName", method = RequestMethod.GET) public PageResult<List<ProjectListVO>> queryByProjectName(@RequestParam(defaultValue = "1", value = "pageNo") Integer pageNo, @RequestParam(defaultValue = "10", value = "pageSize") Integer pageSize, @RequestParam(name = "projectName") String projectName) { if (StringUtils.isEmpty(projectName)) { throw new DareException("参数错误!"); } PageResult<List<ProjectListVO>> result = new PageResult<>(); try { projectName = "%" + projectName + "%"; // System.out.println(projectName); result = projectService.queryByProjectName(pageNo, pageSize, projectName); } catch (Exception e) { e.printStackTrace(); log.error(e.getMessage()); result.setSuccess(false); result.setMessage("操作失败!"); } return result; }
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。