一个粗糙的分页

    由于组内要求做一个简单的查询页面,继整合mybatis之后又有一个分页功能。搜了下mybatis分页功能,基本是通过拦截器来拦截带有分页要求的sql请求,由于我个人对拦截器理解不足,加上需要更改配置文件等等,先自己模拟了个分页功能,具体思路是通过mysql自带的limit来进行指定位置指定数目的查询。

    首先说下limit的用法,很简单,有两个参数的情况下 limit param1,param2; 代表截取检索结果从第param1为止开始的param2个条目,这里就用到了这个用法。

    service层需要两个函数来支持:queryByConditions和queryCountByConditions,即按照条件查找信息列表和按照条件获取数目。
 
    public List<EleAccount> queryByConditions(String dueBillNo, String idNo, String custName, int location, int offset);
 
    public int queryCountByConditions(String dueBillNo, String idNo, String custName);
service两个方法
    其中获取检索列表比获取数目多了两个参数:location和offset。location是根据前台传来的页码加上每页数目算出的检索起始位置,offset是每页显示数目,自己设定。
    前台传向controller的参数,除了平常的检索条件外,多一个curPage,表示当前页码。
    前台页面跳转部分,我显示了首页,当前页码-2到当前页码+2 尾页。具体前台分页部分代码:
        
1 <c:if test = "${not empty results}"><a href="javascript:void(0);" onclick="submit(1)">首页</a></c:if>
2         <c:if test = "${curPage-2>0}"><a href="javascript:void(0);" onclick="submit(${curPage-2})">${curPage-2}</a></c:if>
3         <c:if test = "${curPage-1>0}"><a href="javascript:void(0);" onclick="submit(${curPage-1})">${curPage-1}</a></c:if>
4         <c:if test = "${not empty results}">${curPage}</c:if>
5         <c:if test = "${curPage+1<=totalPage}"><a href="javascript:void(0);" onclick="submit(${curPage+1})">${curPage+1}</a></c:if>
6         <c:if test = "${curPage+2<=totalPage}"><a href="javascript:void(0);" onclick="submit(${curPage+2})">${curPage+2}</a></c:if>
7         <c:if test = "${curPage+1<=totalPage}"><a href="javascript:void(0);" onclick="submit(${curPage+1})">下一页</a></c:if>
8         <c:if test = "${not empty results}"><a href="javascript:void(0);" onclick="submit(${totalPage})">尾页</a></c:if>
result.jsp
    通过c:if标签控制是否显示对应的页码,curPage即当前页码。submit(curPage)函数如下:
     
1 var curPage = document.getElementById("curPage");
2      var submitButton = document.getElementById("submit");
3       function submit(curPageInt){
4           curPage.value = curPageInt;
5           submitButton.click();
6       }
submit方法
    controller部分如下:
        
 1 public ModelAndView result(@RequestParam("dueBillNo")String dueBillNo, 
 2             @RequestParam("custName")String custName, 
 3             @RequestParam("idNo")String idNo,
 4             @RequestParam("curPage")Integer curPage){
 5         Integer pageSize = 10;
 6         if(curPage == null||curPage == 0){
 7             curPage = 1;
 8         }
 9         //查询所需结果
10         Integer size = eleAccountService.queryCountByConditions(dueBillNo, idNo, custName);
11         Integer totalPage = 0;
12         if(size%pageSize == 0){
13             totalPage = size/pageSize;
14         }else{
15             totalPage = size/pageSize + 1;
16         }
17         List<EleAccount> eleAccounts = eleAccountService.queryByConditions(dueBillNo, idNo, custName, (curPage-1)*pageSize, pageSize);
18         ModelMap modelMap = new ModelMap();
19         modelMap.put("curPage", curPage);
20         modelMap.put("totalPage", totalPage);
21         modelMap.put("dueBillNo", dueBillNo);
22         modelMap.put("custName", custName);
23         modelMap.put("idNo", idNo);
24         modelMap.put("results", eleAccounts);
25         return new ModelAndView("/result",modelMap);
26     }
QueryController
 
    实现方法因为是自己想的,所以做的比较粗糙,而且如果有多个分页的话,这样实现有点麻烦,具体如何优化,看以后有什么思路吧~
原文地址:https://www.cnblogs.com/kangyun/p/5474008.html