Web 前端开发

mybatis分页插件pageHelper使用详解

2018-09-09  本文已影响0人  BuddhaCoder

一直以来都用的是自己封装的一个pageBean类来处理分页相关的业务,这个pageBean是从传智播客的视频上面学到的,最近看到别人写的都是用的mybatis的pageHelper,所以自己也心痒痒,将自己的一个竞赛管理系统的分页也换成了pageHelper的方式。话不多说,直接上配置。

首先要使用mybatis的这个插件就必须在mybatis的配置文件中配置插件的相关设置。

mybatis-config.xml :

<configuration>

    <typeAliases>
        <package name="cn.ljtnono.jsgl.pojo" />
        <package name="cn.ljtnono.jsgl.vo" />
    </typeAliases>

    <plugins>
        <plugin interceptor="com.github.pagehelper.PageHelper">
            <!--使用的方言,值有mysql oracle SqlServer等-->
            <property name="dialect" value="mysql"/>
            <!-- 该参数默认为false -->
            <!-- 设置为true时,会将RowBounds第一个参数offset当成pageNum页码使用 -->
            <!-- 和startPage中的pageNum效果一样-->
            <property name="offsetAsPageNum" value="true"/>
            <!-- 该参数默认为false -->
            <!-- 设置为true时,使用RowBounds分页会进行count查询 -->
            <property name="rowBoundsWithCount" value="true"/>
            <!-- 设置为true时,如果pageSize=0或者RowBounds.limit = 0就会查询出全部的结果 -->
            <!-- (相当于没有执行分页查询,但是返回结果仍然是Page类型)
            <property name="pageSizeZero" value="true"/>-->
            <!-- 3.3.0版本可用 - 分页参数合理化,默认false禁用 -->
            <!-- 启用合理化时,如果pageNum<1会查询第一页,如果pageNum>pages会查询最后一页 -->
            <!-- 禁用合理化时,如果pageNum<1或pageNum>pages会返回空数据 -->
            <property name="reasonable" value="true"/>
            <!-- 3.5.0版本可用 - 为了支持startPage(Object params)方法 -->
            <!-- 增加了一个`params`参数来配置参数映射,用于从Map或ServletRequest中取值 -->
            <!-- 可以配置pageNum,pageSize,count,pageSizeZero,reasonable,不配置映射的用默认值 -->
            <!-- 不理解该含义的前提下,不要随便复制该配置
            <property name="params" value="pageNum=start;pageSize=limit;"/>    -->
        </plugin>
    </plugins>

    <!-- 在这里环境标签默认填写的是id为mysql的环境,与spring整合后就废除了环境标签 -->
    <!-- 配置从哪里读取mapper文件 -->
    <mappers>
        <package name="cn.ljtnono.jsgl.dao" />
    </mappers>
</configuration>

这里解释下各种参数:
1、dialect 方言,相信大家不会陌生,就是配置数据库类型,常见的值有mysql、oracle、SqlServer等。这一项是必须配置的。
2、增加offsetAsPageNum属性,默认值为false,则使用默认值时不需要增加该配置,需要设为真时,需要配置该参数。当该参数设置为真时,使用RowBounds分页时,会将偏移参数当成页次使用,可以用页码和页面大小两个参数进行分页。

后面两个参数的作用在注释中解释的非常清楚了,这里不再赘述,关于参数还有好几个,大家可以查看https://github.com/pagehelper/Mybatis-PageHelper github官方文档。

然后就是使用了,这里以查询一个竞赛列表信息为例子。

@Override
    public PageInfo<Contest> getContestListByModality(int modality, int currentPage) {

        Map<String,Object> map = new HashMap<>(1);
        PageInfo<Contest> pageInfo = null;
        map.put("modality",modality);
        try {
            PageHelper.startPage(currentPage,CURRENTCOUNT);
            List<Contest> list = contestDaoMapper.selectByModality(map);
            pageInfo = new PageInfo<>(list);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return pageInfo;
    }

在PageHelper.startPage() 后面的第一个查询会默认使用分页查询,也就是说不必自己再写一个sql去查询总的条数。查询出来的结果使用pageInfo这个类进行接收。

PageInfo这个类中封装了分页所需要的各种参数,十分方便。

下面贴出PageInfo的源代码:

//
// Source code recreated from a .class file by IntelliJ IDEA
// (powered by Fernflower decompiler)
//

package com.github.pagehelper;

import java.io.Serializable;
import java.util.List;

public class PageInfo<T> implements Serializable {
    private static final long serialVersionUID = 1L;
    private int pageNum;
    private int pageSize;
    private int size;
    private int startRow;
    private int endRow;
    private long total;
    private int pages;
    private List<T> list;
    private int firstPage;
    private int prePage;
    private int nextPage;
    private int lastPage;
    private boolean isFirstPage;
    private boolean isLastPage;
    private boolean hasPreviousPage;
    private boolean hasNextPage;
    private int navigatePages;
    private int[] navigatepageNums;
    ........
   }

参数解释:
pageNum :当前页码数。
pageSize : 每一页装的条数。
size : 查询出来的总的页数。
startRow :从哪一条开始查询的。
endRow : 哪一条结束。
total : 总的条数。
pages : 总的页数。
list : 记录集合。
firstPage : 第一页。
prePage : 上一页。
nextPage : 下一页。
lastPage : 最后一页。
isFirstPage : 是否是第一页。
isLastPage :是否是最后一页。
hasPreviousPage : 是否有前一页。
hasNextPage : 是否有后一页。
navigatePages : 导航总的页数。
navigatepageNums : 页数集合。即从第一页到最后一页的页码数。

这个类使用真的很方便,可以直接使用EL表达式来取值。

在jsp中使用EL表达式取值:

contest.jsp :

<tbody>
     <c:forEach items="${pageInfo.list}" var="contest">
                <tr>
                    <td>
                            ${contest.theam}
                    </td>
                    <td class="modality">
                        <c:if test="${contest.modality == 0}">
                            个人
                        </c:if>
                        <c:if test="${contest.modality == 1}">
                            团队
                        </c:if>
                        <c:if test="${contest.modality == 2}">
                            个人/团队
                        </c:if>
                    </td>
                    <td>${contest.way}</td>
                    <td>${contest.deadline}</td>
                    <td>${contest.startTime}</td>
                    <td>${contest.endTime}</td>
                    <td>
                        <input type="button" value="操作" class="signUpOne btn btn-xs" data-contestId="${contest.id}">
                    </td>
                </tr>
            </c:forEach>
            </tbody>

以上就是最简单的pageHelper使用教程了,如果需要深入了解使用方式,请参考github:https://github.com/pagehelper/Mybatis-PageHelper

上一篇下一篇

猜你喜欢

热点阅读