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>

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

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏BinarySec

一些pwn题目的解题思路[pwnable.kr] II

目录 以下是solution的目录 #mistake #shellshock #coin1 #blackjack #lotto #cmd1 Other 一些pw...

3805
来自专栏解Bug之路

MySql之自动生成CRUD代码

MyBatis能够通过获取MySql中的information_schema从而获取表的字段等信息,最后通过这些信息生成代码。 笔者受此启发,将MyBatis...

1053
来自专栏程序员的酒和故事

Go实战--golang中使用RethinkDB(gorethink/gorethink.v3)

生命不止,继续go go go !!! 关于golang中操作数据库,曾经介绍了不少: Go实战–go语言操作sqlite数据库(The way to go) ...

5178
来自专栏芋道源码1024

MyBastis 三种批量插入方式的性能比较

数据库使用的是sqlserver,JDK版本1.8,运行在SpringBoot环境下

3173
来自专栏Hadoop实操

如何使用Flume采集Kafka数据写入Kudu

1.3K2
来自专栏java相关

基于注解实现SpringBoot多数据源配置

1313
来自专栏一个会写诗的程序员的博客

6.3 Spring Boot集成mongodb开发小结

本章我们通过SpringBoot集成mongodb,Java,Kotlin开发一个极简社区文章博客系统。

1703
来自专栏小筱月

SSM 使用 mybatis 分页插件 pagehepler 实现分页

前几天在这里分享了手写 sql 分页查询实现分页,现在来看看使用 mybatis 分页插件 pagehepler 来实现分页

2621
来自专栏Jed的技术阶梯

利用Sqoop实现HDFS的数据与MySQL数据的互导

注意: 查询语句必须包含where条件,即使不需要where条件,也需要写上"where $CONDITIONS"来表示没有select语句没有where条件

1072
来自专栏安恒网络空间安全讲武堂

ecshop3.X 命令执行漏洞分析

刷漏洞信息的时候看到有师傅分析了2.7最新版的命令执行,然后先知有师傅说3.x也有,但是要绕waf,于是弄来了3.6的源码进行复现。

7132

扫码关注云+社区