• pageHelper详解


    详见:https://github.com/pagehelper/Mybatis-PageHelper/edit/master/wikis/zh/HowToUse.md

    ## 使用方法

    1. 引入分页插件

    引入分页插件有下面2种方式,推荐使用 Maven 方式。

    #### 1). 引入 Jar 包

    你可以从下面的地址中下载最新版本的 jar 包

    - https://oss.sonatype.org/content/repositories/releases/com/github/pagehelper/pagehelper/

    - http://repo1.maven.org/maven2/com/github/pagehelper/pagehelper/

    由于使用了sql 解析工具,你还需要下载 jsqlparser.jar(需要和PageHelper 依赖的版本一致) :

    - http://repo1.maven.org/maven2/com/github/jsqlparser/jsqlparser/

    #### 2). 使用 Maven

    在 pom.xml 中添加如下依赖:

    ```xml
    <dependency>
    <groupId>com.github.pagehelper</groupId>
    <artifactId>pagehelper</artifactId>
    <version>最新版本</version>
    </dependency>
    ```
    最新版本号可以从首页查看。

    2. 配置拦截器插件

    特别注意,新版拦截器是 `com.github.pagehelper.PageInterceptor`。`com.github.pagehelper.PageHelper` 现在是一个特殊的 `dialect` 实现类,是分页插件的默认实现类,提供了和以前相同的用法。

    1. 在 MyBatis 配置 xml 中配置拦截器插件

    <!--
    plugins在配置文件中的位置必须符合要求,否则会报错,顺序如下:
    properties?, settings?,
    typeAliases?, typeHandlers?,
    objectFactory?,objectWrapperFactory?,
    plugins?,
    environments?, databaseIdProvider?, mappers?
    -->
    <plugins>
    <!-- com.github.pagehelper为PageHelper类所在包名 -->
    <plugin interceptor="com.github.pagehelper.PageInterceptor">
    <!-- 使用下面的方式配置参数,后面会有所有的参数介绍 -->
    <property name="param1" value="value1"/>
    </plugin>
    </plugins>

    <plugins>
            <plugin interceptor="com.github.pagehelper.PageInterceptor">
                <!-- 设置数据库类型 Oracle,Mysql,MariaDB,SQLite,Hsqldb,PostgreSQL六种数据库-->
                <property name="helperDialect" value="mysql"/>
            </plugin>
        </plugins>

    3. 如何在代码中使用

    Mapper接口方式的调用,推荐这种使用方式。
    PageHelper.startPage(1, 10);
    List<Country> list = countryMapper.selectIf(1);

    `PageHelper.startPage` 静态方法调用

    ##### 例一:

    ```java
    //获取第1页,10条内容,默认查询总数count
    PageHelper.startPage(1, 10);
    //紧跟着的第一个select方法会被分页
    List<Country> list = countryMapper.selectIf(1);
    assertEquals(2, list.get(0).getId());
    assertEquals(10, list.size());
    //分页时,实际返回的结果list类型是Page<E>,如果想取出分页信息,需要强制转换为Page<E>
    assertEquals(182, ((Page) list).getTotal());
    ```

    ##### 例二:
    ```java
    //request: url?pageNum=1&pageSize=10
    //支持 ServletRequest,Map,POJO 对象,需要配合 params 参数
    PageHelper.startPage(request);
    //紧跟着的第一个select方法会被分页
    List<Country> list = countryMapper.selectIf(1);

    //后面的不会被分页,除非再次调用PageHelper.startPage
    List<Country> list2 = countryMapper.selectIf(null);
    //list1
    assertEquals(2, list.get(0).getId());
    assertEquals(10, list.size());
    //分页时,实际返回的结果list类型是Page<E>,如果想取出分页信息,需要强制转换为Page<E>,
    //或者使用PageInfo类(下面的例子有介绍)
    assertEquals(182, ((Page) list).getTotal());
    //list2
    assertEquals(1, list2.get(0).getId());
    assertEquals(182, list2.size());
    ```

    ##### 例三,使用`PageInfo`的用法:

    ```java
    //获取第1页,10条内容,默认查询总数count
    PageHelper.startPage(1, 10);
    List<Country> list = countryMapper.selectAll();
    //用PageInfo对结果进行包装
    PageInfo page = new PageInfo(list);
    //测试PageInfo全部属性
    //PageInfo包含了非常全面的分页属性
    assertEquals(1, page.getPageNum());
    assertEquals(10, page.getPageSize());
    assertEquals(1, page.getStartRow());
    assertEquals(10, page.getEndRow());
    assertEquals(183, page.getTotal());
    assertEquals(19, page.getPages());
    assertEquals(1, page.getFirstPage());
    assertEquals(8, page.getLastPage());
    assertEquals(true, page.isFirstPage());
    assertEquals(false, page.isLastPage());
    assertEquals(false, page.isHasPreviousPage());
    assertEquals(true, page.isHasNextPage());
    ```

    //service层调用
    
     public PageInfo<OrderInfo> getAllOrders(int page, int pageSize){
            PageHelper.startPage(page, pageSize);
            List<OrderInfo> list = orderMapper.selectAllOrders();
            PageInfo<OrderInfo> pageInfo = new PageInfo<>(list);
            return pageInfo;
        }
    //controller层使用  
    
    @RequestMapping(value ="/all",method = RequestMethod.GET)
        public PageInfo<OrderInfo> getAllOrders(@RequestParam(value = "page",defaultValue = "1") int page,
                                                @RequestParam(value = "pageSize",defaultValue = "5") int pageSize){
            return orderService.getAllOrders(page,pageSize);
        }

    返回给浏览器的数据:





  • 相关阅读:
    CF293E Close Vertice
    [SCOI2016]幸运数字
    [NOI2003]逃学的小孩
    0302读后感
    1231递归下降语法分析
    1210-有穷自动机
    11.12 评论汇总
    1029语言文法
    0921 词法分析
    0909开启编译原理之路
  • 原文地址:https://www.cnblogs.com/ustc-anmin/p/10638119.html
Copyright © 2020-2023  润新知