Mybatis使用PageHelper

  • PageHelper是他人开发出来方便mybatis进行分页操作的一个插件。

  • 分页查询中的两个重要概念:

    • pageNum:页号,表示要查询第几页的信息
    • pageSize:每页可以显示的记录条数
  • 用户发送请求时,需要将这两个信息一起发送。

  • 在mysql中可以使用limit关键字来进行分页操作。比如select * from xxx limit 0,3;表示显示开头3条记录。limit后的第一个参数表示起始位置,第二个参数表示显示多少条记录。

  • 通过分析我们可以得到以下关系式:

    • startIndex = (pageNum - 1) * pageSize;
    • 因此根据用户从前端传来的pageNum和pageSize参数,可以使用limit关键字从数据库中获取相关数据
  • 其实获取分页相关的数据并不难(直接通过limit关键字即可),但是想要获取分页相关的信息就没那么简单,比如是否还有下一页、上一页(通过limit很难做到),因此我们需要使用pageHelper插件

PageHelper插件
  • 使用PageHelper插件进行分页,更加方便简单

  • 使用方法

    1. 引入pageHelper插件依赖

      • <dependency>
                    <groupId>com.github.pagehelper</groupId>
                    <artifactId>pagehelper</artifactId>
                    <version>5.3.1</version>
                </dependency>
        
        1
        2
        3
        4
        5
        6
        7
        8

        2. 在mybatis核心配置文件中配置插件

        * ```xml
        <!-- mybatis分页拦截器-->
        <plugins>
        <plugin interceptor="com.github.pagehelper.PageInterceptor"></plugin>
        </plugins>
    2. 编写java代码

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      public void testSelectByPage(){
      SqlSession sqlSession = SqlSessionUtil.getSqlSession();
      CarMapper mapper = sqlSession.getMapper(CarMapper.class);
      //注意:在执行SQL语句(select)之前需要开启pageHelper
      int startIndex = 2;
      int pageSize = 2;
      PageHelper.startPage(startIndex,pageSize);
      List<Car> cars = mapper.selectAll();
      cars.forEach(car -> System.out.println(car));
      }
    3. 通过PageInfo对象获取分页信息

      • public void testSelectByPage(){
                SqlSession sqlSession = SqlSessionUtil.getSqlSession();
                CarMapper mapper = sqlSession.getMapper(CarMapper.class);
                //注意:在执行SQL语句(select)之前需要开启pageHelper
                int startIndex = 2;
                int pageSize = 2;
                PageHelper.startPage(startIndex,pageSize);
                List<Car> cars = mapper.selectAll();
        //        cars.forEach(car -> System.out.println(car));
        
                PageInfo<Car> carpageInfo = new PageInfo<Car>(cars,2);
                System.out.println(carpageInfo);
            }
        
        /**
        这也是我们使用PageHelper的目的
        PageInfo中包含的信息
        PageInfo{pageNum=2(页数), pageSize=2(页的大小), size=2, startRow=3(数据库表的起始), endRow=4(数据库表的结束), total=4(数据库表的数据大小), pages=2(总页数), list=Page{count=true, pageNum=2, pageSize=2, startRow=2, endRow=4, total=4, pages=2, reasonable=false, pageSizeZero=false}[法拉利, BMW], prePage=1(前一页的编号), nextPage=0(后一页的编号,当为最后一页时,后一页编号为0), isFirstPage=false(是否是第一页), isLastPage=true(是否是最后一页), hasPreviousPage=true(前面是否还有页), hasNextPage=false(后面是否还有页), navigatePages=2(导航栏中显示的页), navigateFirstPage=1, navigateLastPage=2, navigatepageNums=[1, 2]}
        **/