开发者社区> 知识浅谈> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

Springboot中PageHelper的使用方法

简介: Springboot中PageHelper的使用方法
+关注继续查看

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;
    }

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
Springboot 自动装配原理探索
官网介绍 先来看看官网是怎么定义这个自动装配的~ Spring Boot auto-configuration attempts to automatically configure your Spring application based on the jar dependencies that you have added 可以看到这里说,当你引入了某个 jar 依赖包时,Springboot 会尝试根据这个依赖去自动配置 Spring 应用程序。
53 0
SpringBoot基础篇AOP之高级使用技能
前面一篇博文 190301-SpringBoot基础篇AOP之基本使用姿势小结 介绍了aop的简单使用方式,在文章最后,抛出了几个问题待解决,本篇博文则将针对前面的问题,看下更多关于AOP的使用说明
47 0
用了那么久的springboot,你知道它的自动装配原理吗?
用了那么久的springboot,你知道它的自动装配原理吗?
26 0
Spring Boot 2.4新特性:节省95%内存占用
Spring Boot 2.4新特性:节省95%内存占用
169 0
Spring Boot 2.4新特性:节省95%内存占用
Spring Boot 2.4新特性:节省95%内存占用
93 0
Hello Spring Boot应用程序
Hello Spring Boot应用程序
52 0
Springboot进阶-JDBC、Druid、Mybatis、Swagger、SpringMVC、Mail
Springboot进阶-JDBC、Druid、Mybatis、Swagger、SpringMVC、Mail
79 0
springboot使用swagger2及遇到的小问题
微服务的流行提供了诸多的方便,随着也带来了N多的API,而swagger2正是一个对API管理的很好的“工具”,本文主要介绍springboot对swagger2的集成,以及集成中遇到的无法访问的问题。
1211 0
【spring boot】13.在spring boot下使用多线程
使用场景: 方法处理到某一步,需要将信息交给另一个线程去处理!! =================================================================================== 第一种:最简单的Runnable public void test(String msg){ System.
2008 0
+关注
知识浅谈
🍁 作者:知识浅谈,CSDN签约讲师,阿里云社区专家博主,华为云云享专家,热爱分享创作 💒 公众号:知识浅谈 📌 擅长领域:全栈工程师、爬虫、ACM算法 🔥 联系方式vx:zsqtcc
89
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
冬季实战营第三期:MySQL数据库进阶实战
立即下载