美文网首页Web 前端开发
mybatis分页插件pageHelper使用详解

mybatis分页插件pageHelper使用详解

作者: BuddhaCoder | 来源:发表于2018-09-09 23:08 被阅读0次

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

    相关文章

      网友评论

        本文标题:mybatis分页插件pageHelper使用详解

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