mybatis分页插件pageHelper使用详解

一直以来都用的是自己封装的一个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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,456评论 5 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,370评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,337评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,583评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,596评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,572评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,936评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,595评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,850评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,601评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,685评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,371评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,951评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,934评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,167评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,636评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,411评论 2 342

推荐阅读更多精彩内容