专栏首页软件工程师成长笔记Mybatis分页插件PageHelper的使用详解

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 条评论
登录 后参与评论

相关文章

  • MyBatis中Like语句使用方式(模糊查询)

    麦克劳林
  • 基于MyBatis用mapper.xml文件配置执行任意字符串拼接sql语句

    由于做的一个小项目里需要联动查询,一想16种情况,因为我是SSM框架写的,这样我就要写16个接口,16个实现,16条sql语句,想想就大头。既然数据库本身接收的...

    麦克劳林
  • 复选框实现子节点父节点联动

    麦克劳林
  • tomcat请求处理分析(二) 启动mapperListener

    1.1.1启动mapperListener     这个方法的核心就是注册Host的 public void startInternal() throws L...

    cfs
  • Canvas小游戏——五子棋

    Canvas API(画布)是在HTML5中新增的标签用于在网页实时生成图像,并且可以操作图像内容。 HTML5的Canvas画布功能真的很强大,与之对应的还...

    Javanx
  • Kafka漫游记

    我是一条消息,从我被生产者发布到topic的时候,我就清楚自己的使命:被消费者获取消费。但我一直很纳闷,把我直接推送给消费者不就行了,为什么一定要先推送到类似队...

    java达人
  • 小游戏——js+h5[canvas]+cs3制作【五子棋】小游戏

    xing.org1^
  • Kafka漫游记

    我是一条消息,从我被生产者发布到topic的时候,我就清楚自己的使命:被消费者获取消费。但我一直很纳闷,把我直接推送给消费者不就行了,为什么一定要先推送到类似队...

    java达人
  • JavaScript版的简单动画

    Google+中有一个特效:拖拽用户头像至分组内,用户头像会有一个特效(绕着圆圈转一圈)。写了个简单的示例,效果如下图所示:

    meteoric
  • Web应用程序防火墙(WAF)bypass技术讨论(一)

    Web应用程序中发现RCE漏洞的情况还是挺常见的,2017 OWASP Top 10应用程序安全风险”也将“注入”置于第一位置,例如当解释器接收到用户可控的数据...

    HACK学习

扫码关注云+社区

领取腾讯云代金券