美文网首页
PageHelper分页插件

PageHelper分页插件

作者: __元昊__ | 来源:发表于2019-07-22 15:42 被阅读0次

    1. 引入分页插件

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

    <dependency>
        <groupId>com.github.pagehelper</groupId>
        <artifactId>pagehelper</artifactId>
        <version>5.1.10</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>
    

    2). 在 Spring 配置文件中配置拦截器插件
    使用 spring 的属性配置方式,可以使用 plugins 属性像下面这样配置:

    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
      <!-- 注意其他配置 -->
      <property name="plugins">
        <array>
          <bean class="com.github.pagehelper.PageInterceptor">
            <property name="properties">
              <!--使用下面的方式配置参数,一行配置一个 -->
              <value>
                params=value1
              </value>
            </property>
          </bean>
        </array>
      </property>
    </bean>
    

    3. 分页插件参数介绍

    1)helperDialect:分页插件会自动检测当前的数据库链接,自动选择合适的分页方式。 你可以配置helperDialect属性来指定分页插件使用哪种方言。配置时,可以使用下面的缩写值:
    oracle,mysql,mariadb,sqlite,hsqldb,postgresql,db2,sqlserver,informix,h2,sqlserver2012,derby
    特别注意:使用 SqlServer2012 数据库时,需要手动指定为 sqlserver2012,否则会使用 SqlServer2005 的方式进行分页。
    你也可以实现 AbstractHelperDialect,然后配置该属性为实现类的全限定名称即可使用自定义的实现方法。

    2)reasonable:分页合理化参数,默认值为false。当该参数设置为 true 时,pageNum<=0 时会查询第一页, pageNum>pages(超过总数时),会查询最后一页。默认false 时,直接根据参数进行查询。

    其他参数见官方文档

    4. 如何在代码中使用

    controller:

    @Controller
    @RequestMapping(value = "${frontPath}")
    public class Test_Controller {
        @Autowired
        lyhService lyhService;
    
        @RequestMapping("/host")
        public ModelAndView goHost(){
            return new ModelAndView("zhinengkefu/hostPage");
        }
    
        @RequestMapping("/listAllArticle")
        public ModelAndView listAllArticle(@RequestParam(value = "pageNo",defaultValue = "1")Integer pageNo){
            ModelAndView modelAndView = new ModelAndView("zhinengkefu/artList");
            //在你需要进行分页的 MyBatis 查询方法前调用 PageHelper.startPage 静态方法即可,紧跟在这个方法后的第一个MyBatis 查询方法会被进行分页。
            PageHelper.startPage(pageNo , 2);
            List<Map<String, Object>> maps = lyhService.listAllArticle();
            PageInfo<Map<String, Object>> mapPageInfo = new PageInfo<>(maps);
            modelAndView.addObject("articleList",mapPageInfo);
            return modelAndView;
        }
    }
    

    使用PageInfo的用法:

    //获取第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());
    

    我这里为了直观 把所有的属性基本上都使用了 这些事内置类中的属性 直接调用即可 是不是很方便

    <table>
        <tr>
            <td>公告</td>
        </tr>
        <c:forEach items="${articleList.list}" var="art">
            <tr>
                <td><a href="${pageContext.request.contextPath}${fns:getFrontPath()}/view-${art.category_id}-${art.id}${fns:getUrlSuffix()}">${art.title}</a></td>
            </tr>
        </c:forEach>
    </table>
        <p>当前 ${articleList.pageNum }页,总${articleList.pages}页,总 ${articleList.total}条记录</p>
        <a href="${pageContext.request.contextPath}${fns:getFrontPath()}/listAllArticle?pageNo=1">首页</a>
        <c:if test="${articleList.hasPreviousPage }">
            <a href="${pageContext.request.contextPath}${fns:getFrontPath()}/listAllArticle?pageNo=${articleList.pageNum-1}">上一页</a>
        </c:if>
        <c:if test="${articleList.hasNextPage }">
            <a href="${pageContext.request.contextPath}${fns:getFrontPath()}/listAllArticle?pageNo=${articleList.pageNum+1}">下一页</a>
        </c:if>
        <a href="${pageContext.request.contextPath}${fns:getFrontPath()}/listAllArticle?pageNo=${articleList.pages}">末页</a>
    
    
    微信截图_20190722153627.png

    相关文章

      网友评论

          本文标题:PageHelper分页插件

          本文链接:https://www.haomeiwen.com/subject/lmhwlctx.html