Mybatis分页插件PageHelper的使用详解

1 说明

如果你也在用Mybatis,建议尝试该分页插件,个人感觉这个是最方便,超好用的分页插件。
该插件目前支持Oracle,Mysql,MariaDB,SQLite,Hsqldb,PostgreSQL六种数据库分页。

2 使用方法

2.1 架包

在pom.xml文件中加入如下代码:

<!-- pageHelper -->
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper</artifactId>
<version>4.2.1</version>
</dependency>

2.2 PageHelper的配置

在我的mybatis-config.xml中加入如下代码:

<!-- spring和MyBatis完美整合,不需要mybatis的配置映射文件 -->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<!-- PageHelper的配置 -->
<property name="configLocation" value="classpath:mybatis-config.xml" />
</bean>

2.3 插入page.js文件

文件内容如下(有点小长):

/**
 * Created by zxm on 2017/3/31.
 */
$.fn.extend({
"initPage":function(listCount,currentPage,fun){
    var maxshowpageitem = $(this).attr("maxshowpageitem");
    if(maxshowpageitem!=null&&maxshowpageitem>0&&maxshowpageitem!=""){
        page.maxshowpageitem = maxshowpageitem;
    }
    var pagelistcount = $(this).attr("pagelistcount");
    if(pagelistcount!=null&&pagelistcount>0&&pagelistcount!=""){
        page.pagelistcount = pagelistcount;
    }

    var pageId = $(this).attr("id");
    page.pageId=pageId;
    if(listCount<0){
        listCount = 0;
    }
    if(currentPage<=0){
        currentPage=1;
    }
    page.setPageListCount(pageId,listCount,currentPage,fun);

}
});
var  page = {
"maxshowpageitem":5,//最多显示的页码个数
"pagelistcount":10,//每一页显示的内容条数
/**
 * 初始化分页界面
 * @param listCount 列表总量
 */
"initWithUl":function(pageId,listCount,currentPage){

    var pageCount = 1;
    if(listCount>0){
        var pageCount = listCount%page.pagelistcount>0?parseInt(listCount/page.pagelistcount)+1:parseInt(listCount/page.pagelistcount);
    }
    var appendStr = page.getPageListModel(pageCount,currentPage);
    $("#"+pageId).html(appendStr);
},
/**
 * 设置列表总量和当前页码
 * @param listCount 列表总量
 * @param currentPage 当前页码
 */
"setPageListCount":function(pageId,listCount,currentPage,fun){
    listCount = parseInt(listCount);
    currentPage = parseInt(currentPage);
    page.initWithUl(pageId,listCount,currentPage);
    page.initPageEvent(pageId,listCount,fun);
    if(typeof fun == "function"){
        fun(currentPage);
    }
},
"initPageEvent":function(pageId,listCount,fun){
    $("#"+pageId +">li[class='pageItem']").on("click",function(){
        page.setPageListCount(pageId,listCount,$(this).attr("page-data"),fun);
    });
},
"getPageListModel":function(pageCount,currentPage){
    var prePage = currentPage-1;
    var nextPage = currentPage+1;
    var prePageClass ="pageItem";
    var nextPageClass = "pageItem";
    if(prePage<=0){
        prePageClass="pageItemDisable";
    }
    if(nextPage>pageCount){
        nextPageClass="pageItemDisable";
    }
    var appendStr ="";
    appendStr+="<li class='"+prePageClass+"' page-data='1' page-rel='firstpage'>首页</li>";
    appendStr+="<li class='"+prePageClass+"' page-data='"+prePage+"' page-rel='prepage'>&lt;上一页</li>";
    var miniPageNumber = 1;
    if(currentPage-parseInt(page.maxshowpageitem/2)>0&&currentPage+parseInt(page.maxshowpageitem/2)<=pageCount){
        miniPageNumber = currentPage-parseInt(page.maxshowpageitem/2);
    }else if(currentPage-parseInt(page.maxshowpageitem/2)>0&&currentPage+parseInt(page.maxshowpageitem/2)>pageCount){
        miniPageNumber = pageCount-page.maxshowpageitem+1;
        if(miniPageNumber<=0){
            miniPageNumber=1;
        }
    }
    var showPageNum = parseInt(page.maxshowpageitem);
    if(pageCount<showPageNum){
        showPageNum = pageCount
    }
    for(var i=0;i<showPageNum;i++){
        var pageNumber = miniPageNumber++;
        var itemPageClass = "pageItem";
        if(pageNumber==currentPage){
            itemPageClass = "pageItemActive";
        }

        appendStr+="<li class='"+itemPageClass+"' page-data='"+pageNumber+"' page-rel='itempage'>"+pageNumber+"</li>";
    }
    appendStr+="<li class='"+nextPageClass+"' page-data='"+nextPage+"' page-rel='nextpage'>下一页&gt;  </li>";
    appendStr+="<li class='"+nextPageClass+"' page-data='"+pageCount+"' page-rel='lastpage'>尾页</li>";
   return appendStr;

  }
}

3 Java代码和JSP中实现

准备工作做好了,可以实现啦;

3.1 Java中的代码

导包是必须滴!!!

import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;

其次再看关键的两句代码:

@RequestMapping(value = "/findAllUser")
public String findAllUser(Model model) {        
    PageHelper.startPage(CommonConstant.INITPAGE, CommonConstant.USERTABLENUM);
    List<User> userList = userService.findAllUserList();
    PageInfo<User> userListPageInfo = new PageInfo<>(userList);
    model.addAttribute("usermes", userList);
    model.addAttribute("pageUser",userListPageInfo);
    this.currentUserName = null;
    return "userManage"; 
}
  /**
 * <p>Title: findUserListByPage</p>
 * <p>Description: 翻页查询UserList</p>
 * @author 刘冬冬
 * @Date 2017年5月16日
 * @param model
 * @param goalPage
 * @return
 */
@RequestMapping(value = "/findUserListByPage")
public String findUserListByPage(Model model, int goalPage) {   
    PageHelper.startPage(goalPage, CommonConstant.USERTABLENUM);
    
    if(this.currentUserName != null){
        List<User> userList = userService.selectByUserName(this.currentUserName);
        PageInfo<User> userListPageInfo = new PageInfo<>(userList);
        for (User user : userList) {
            if(user.getLoginTime()!= null){
                Date date = new Date(((User) user).getLoginTime());
                SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
                user.setLoginTimeFormate(format.format(date));
            }else{
                user.setLoginTimeFormate("从未登录");
            }
        }
        model.addAttribute("usermes", userList);
        model.addAttribute("pageUser",userListPageInfo);
    }else{
        List<User> userList = userService.findAllUserList();
        PageInfo<User> userListPageInfo = new PageInfo<>(userList);
        model.addAttribute("usermes", userList);
        model.addAttribute("pageUser",userListPageInfo);
    }                   
    return "userManage";  
}

这么长一段代码关键的就是两句,现在把它拿出来:

PageHelper.startPage(goalPage, CommonConstant.USERTABLENUM);
PageInfo<User> userListPageInfo = new PageInfo<>(userList);

3.2 jsp中的代码

<div id="allDevPaginationInfo">
        <div id="allDevCount"class="col-md-4 column">
            <label>本页共${pageUser.size}个用户    总共${pageUser.total}个用户</label>
        </div>
        <div id="allDevpagination" class="col-md-8 column" >
            <ul class="pagination" >
                <li><a href="${pageContext.request.contextPath}/asset/user/findUserListByPage?goalPage=1"<c:if test="${pageUser.pageNum==1}"> style="color: #A8A8A8" onclick=" return document.execCommand('refresh',false,0)"</c:if>>首页</a></li>
                <li><a href="${pageContext.request.contextPath}/asset/user/findUserListByPage?goalPage=${pageUser.prePage}"<c:if test="${pageUser.pageNum==1}"> style="color: #A8A8A8" onclick=" return document.execCommand('refresh',false,0)"</c:if>>上一页</a></li>
                <li><a href="${pageContext.request.contextPath}/asset/user/findUserListByPage?goalPage=${pageUser.nextPage}" <c:if test="${pageUser.pageNum==pageUser.pages}"> style="color: #A8A8A8" onclick=" return document.execCommand('refresh',false,0)"</c:if>>下一页</a></li>
                <li><a href="${pageContext.request.contextPath}/asset/user/findUserListByPage?goalPage=${pageUser.pages}" <c:if test="${pageUser.pageNum==pageUser.pages}"> style="color: #A8A8A8" onclick=" return document.execCommand('refresh',false,0)"</c:if>>尾页</a></li> 
                <li><label>第${pageUser.pageNum}页</label><label>/共${pageUser.pages}页</label></li>
            </ul>
        </div>
    </div>

其中也实现了按钮禁用功能,当时首页或者尾页时,就不能点击事件并且变灰。
不足之处请指教修改,不断总结与学习!!!

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

推荐阅读更多精彩内容

  • 1.说明如果你也在用Mybatis,建议尝试该分页插件,这个一定是最方便使用的分页插件。该插件目前支持Oracle...
    木栈桥上阅读 855评论 0 0
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,292评论 18 399
  • 1. 简介 1.1 什么是 MyBatis ? MyBatis 是支持定制化 SQL、存储过程以及高级映射的优秀的...
    笨鸟慢飞阅读 5,266评论 0 4
  • 夏日的早晨是极美好的,沒有雾霾的侵扰,太陽又升得早,六奌钟時,天已亮出可愛的蔚藍色,還不算太熱,又有些许小風...
    慈開阅读 333评论 2 1