Mybatis分页插件PageHelper的配置与基本使用

1.分页意义:

  1.1 减轻服务器端的压力

  1.2 给用户更好的用户体验

 

  分页分为:

前端分页:

前端分页要依赖后端分页

后端分页:

        mybatis分页插件:PageHelper,支持mysql,oracle,db2,sqlServer....都支持

2.mybatis分页插件使用:

1.导入jar包:

 

2.在mybatis的全局配置文件中配置一个PageHelper的插件:

       

3.在我们查询列表之前使用PageHelper.startPage()来设置分页信息
 1 public List<Goods> getGoodsList(){
 2 
 3       PageHelper.startPage(3,5);
 4 
 5       List<Goods> goodsList = goodsMapper.getGoodsList();
 6 
 7       PageInfo<Goods> page = new PageInfo(goodsList,3);
 8 
 9  
10 
11       System.out.println("总页数:"+page.getPages());
12 
13       System.out.println("总记录数:"+page.getTotal());
14 
15   System.out.println("当前页:"+page.getPageNum());
16 
17  
18 
19            System.out.println("上一页:"+page.getPrePage());
20 
21            System.out.println("下一页:"+page.getNextPage());
22 
23  
24 
25            System.out.println("是否有上一页:"+page.isHasPreviousPage());
26 
27            System.out.println("是否有下一页:"+page.isHasNextPage());
28 
29  
30 
31  
32 
33            System.out.println("是否为首页:"+page.isIsFirstPage());
34 
35            System.out.println("是否为末页:"+page.isIsLastPage());
36 
37  
38 
39  
40 
41            System.out.println("PageSize:"+page.getPageSize());
42 
43            List<Goods> list = page.getList();
44 
45            for (Goods goods : list) {
46 
47                  System.out.println(goods);
48 
49             }
50 
51                      //获取导航页数
52 
53            int[] nums = page.getNavigatepageNums();
54 
55  
56 
57            System.out.println(Arrays.toString(nums));
58 
59  
60 
61                  return goodsList;
62 
63            }

 

  

4.实际应用

 

 

 

 

 

 前端页面js:

 1 $(function () {
 2    $.ajax({
 3       type:"get",
 4       url:"${pageContext.request.contextPath}/notice/jsonList",
 5       success:function (msg) {
 6          if(msg.map.status==200){
 7                    $(msg.map.page.list).each(function(index,item){
 8                        var tr="<tr class='abc' align='center' bgcolor='#FFFFFF' onMouseMove='javascript:this.bgColor='#FCFDEE';' onMouseOut='javascript:this.bgColor='#FFFFFF';' height='22' >"
 9                         +"<td><input name='id' type='checkbox' id='id' value='"+item.nid+"' class='np'></td>"
10                         +"<td>"+((msg.map.page.pageNum-1)*msg.map.page.pageSize+(index+1))+"</td>"
11                         +"<td>"+item.ntitle+"</td>"
12                         +"<td align='center'><span >"+item.remark+"</span></td>"
13                         +"<td>"+moment(item.ndate).format("YYYY-MM-DD")+"</td>"
14                         +"<td><a >删除</a> | <a >编辑</a></td>"
15                         +"</tr>";
16                        $("#tr_mark").before(tr);
17                    });
18             var div="<div></div>";
19             var firstPage="<a onclick='find(this.name)' href='javascript:void(0);' name='"+msg.map.requestURI+"?pageNum=1'>首页</a>";
20             var endPage="<a onclick='find(this.name)' href='javascript:void(0);' name='"+msg.map.requestURI+"?pageNum="+msg.map.page.pages+"'>尾页</a>";
21             var prePage="<a onclick='find(this.name)' href='javascript:void(0)' name='"+msg.map.requestURI+"?pageNum="+(msg.map.page.pageNum-1)+"'>上一页</a>"
22             var nextPage="<a onclick='find(this.name)' href='javascript:void(0)' name='"+msg.map.requestURI+"?pageNum="+(msg.map.page.pageNum+1)+"'>下一页</a>";
23             var pages=""
24             $(msg.map.page.navigatepageNums).each(function (index,item) {
25                pages="&nbsp;"+pages+"<a onclick='find(this.name)' href='javascript:void(0)' name='"+msg.map.requestURI+"?pageNum="+item+"'>"+(index+1)+"</a> &nbsp;";
26             })
27             $(div).append(firstPage).append(prePage).append(pages).append(nextPage).append(endPage).appendTo($("#page_tr"));
28                }
29            }
30    })
31    })
32 <!--日期类型转换-->
33 function parseDate(obj) {
34            var date = new Date(obj);
35            var year=date.getFullYear();
36            var month=date.getMonth()+1;
37            var day=date.getDate();
38            if(month<=9){
39                month="0"+month;
40            }if (day<10){
41                day="0"+day;
42            }
43            return year+"-"+month+"-"+day;
44    }
45 <!--定义方法,点击上一页,下一页,首页,尾页等,继续发送异步请求查询,返回结果,然后分页展示-->
46    function find(obj) {
47        $.ajax({
48            type:"get",
49            url:obj,
50            success:function (msg) {
51                if(msg.map.status==200){
52             $(".abc").remove();
53                    $(msg.map.page.list).each(function(index,item){
54                        var tr="<tr class='abc' align='center' bgcolor='#FFFFFF' onMouseMove='javascript:this.bgColor='#FCFDEE';' onMouseOut='javascript:this.bgColor='#FFFFFF';' height='22' >"
55                            +"<td><input name='id' type='checkbox' id='id' value='"+item.nid+"' class='np'></td>"
56                            +"<td>"+((msg.map.page.pageNum-1)*msg.map.page.pageSize+(index+1))+"</td>"
57                            +"<td>"+item.ntitle+"</td>"
58                            +"<td align='center'><span >"+item.remark+"</span></td>"
59                            +"<td>"+parseDate(item.ndate)+"</td>"
60                            +"<td><a >删除</a> | <a >编辑</a></td>"
61                            +"</tr>";
62                        $("#tr_mark").before(tr);
63                    });
64                }
65            }
66        })
67    }

PageHelper升级版条件查询:

控制层代码:

 1 Controller:
 2 /*查询所有的房间信息+分页+关键字搜索*/
 3     @RequestMapping(value = "/list",method=RequestMethod.GET)
 4     public ModelAndView findAll(HttpServletRequest request,@RequestParam(value = "pageNum",defaultValue = "1")Integer pageNum){
 5         Map<String, Object> parameters = WebUtils.getParametersStartingWith(request, "search_");
 6         PageInfo<Room> page=roomService.findAll(pageNum,parameters);
 7         String requestURI = request.getRequestURI();
 8         String queryStr=parametersMapToString(parameters);
 9         ModelAndView mv=new ModelAndView("/room/roomList");
10         mv.addObject("pageInfo", page);
11         mv.addObject("requestURI",requestURI);
12         mv.addObject("queryStr",queryStr);
13         return mv;
14     }
15 //    将获取的搜索关键字map集合转换类型方法
16     private String parametersMapToString(Map<String, Object> parameters) {
17         Set<Entry<String,Object>> entrySet = parameters.entrySet();
18         String str="";
19         for (Entry<String, Object> entry : entrySet) {
20             String key = entry.getKey();
21             String value = (String)entry.getValue();
22             str=str+"&"+"search_"+key+"="+value;
23         }
24         return str;
25     }

业务逻辑层:

 1 Service:
 2 /*查询所有room的方法,带分页*/
 3     @Override
 4     public PageInfo<Room> findAll(Integer pageNum,Map<String, Object> parameters) {
 5         //调用map分解方法
 6         Map<String, String> map=mapObjectToString(parameters);
 7         //设置当前页,以及当前页记录数
 8         PageHelper.startPage(pageNum, 8);
 9         String roomNumber = map.get("roomNumber");
10         RoomExample roomExample = new RoomExample();
11         if(roomNumber!=null&&roomNumber!="") {
12             Criteria createCriteria = roomExample.createCriteria();
13             createCriteria.andRoomNumberEqualTo(roomNumber);
14         }
15         List<Room> rooms = roomMapper.selectByExample(roomExample);
16         for(Room room:rooms) {
17             Integer attrLevelId = room.getGuestRoomLevelID();
18             AttributeDetails attributeDetails = attributeDetailsMapper.selectByPrimaryKey(attrLevelId);
19             room.setRoomLevelName(attributeDetails.getAttributeDetailsName());
20             Integer roomstateid = room.getRoomStateID();
21             AttributeDetails attributeDetails2 = attributeDetailsMapper.selectByPrimaryKey(roomstateid);
22             room.setRoomStateName(attributeDetails2.getAttributeDetailsName());
23         }
24         //pageInfo 封装,设置导航页显示数量
25         PageInfo<Room> page=new PageInfo<Room>(rooms,3);
26         return page;
27     }
28 //    分解查询map
29     private Map<String, String> mapObjectToString(Map<String, Object> parameters) {
30         Set<Entry<String,Object>> entrySet = parameters.entrySet();
31         Map<String, String> map=new HashMap<String, String>();
32         for (Entry<String, Object> entry : entrySet) {
33             String key = entry.getKey();
34             String value = (String)entry.getValue();
35             //如果有模糊查询,将值用“%”封装
36             if(key.contains("like")) {
37                 key=key.substring(key.indexOf("_")+1);
38                 value="%"+value+"%";
39             }
40             map.put(key, value);
41         }
42         return map;
43     }

前端分页:

page.jsp:

 1 <%@ page language="java" contentType="text/html; charset=UTF-8"
 2     pageEncoding="UTF-8"%>
 3     <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
 4 <%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
 5 <!DOCTYPE html>
 6 <head>
 7 <meta charset="UTF-8">
 8 <script src="${pageContext.request.contextPath}/bootstrap/js/jquery-3.1.1.min.js"></script>
 9 <script type="text/javascript">
10 /* 分页跳转方法 */
11     function jump(){
12          var num=$("#but").val();
13          var reg = /^[1-9]\d*$/;
14          if(!reg.test(num)){
15              alert("请输入正确的页码!");
16              $("#but").val("");
17              return;
18          }else{
19             window.location.href="${requestURI}?pageNum="+num+"${queryStr}"; 
20          }
21     }
22 </script>
23 </head>
24     <!-- 分页展示 -->
25 <tr>
26     <td colspan="12">
27         <a href="${requestURI}?pageNum=1${queryStr}">首页</a>
28         <a href="${requestURI}?pageNum=${pageInfo.pageNum-1 }${queryStr}">上一页</a>
29         <c:forEach items="${pageInfo.navigatepageNums }" var="num" varStatus="index" >
30         <c:if test="${pageInfo.pageNum==num }">
31             <a style="font-size:18px;color:white;font-weight:bold;background-color:#FF34B3" href="${requestURI}?pageNum=${num}${queryStr}">${num }</a>
32         </c:if>
33         <c:if test="${pageInfo.pageNum!=num }">
34             <a href="${requestURI}?pageNum=${num}${queryStr}">${num }</a>
35         </c:if>
36             
37         </c:forEach>
38         <a href="${requestURI}?pageNum=${pageInfo.pageNum+1 }${queryStr}">下一页</a>
39         <a href="${requestURI}?pageNum=${pageInfo.pages }${queryStr}">尾页</a>
40         &nbsp;&nbsp;跳转到第<input id="but" style="width:25px" onblur="jump()"/>41     </td>
42 </tr>

其他页面可以用引入:

1 <jsp:include page="../page/page.jsp"></jsp:include>

 

posted @ 2019-11-05 22:42  keyboard达人  阅读(4875)  评论(1编辑  收藏  举报