zoukankan      html  css  js  c++  java
  • pageHelper分页插件使用

    pageHelper分页插件使用

    1.摘要pageHelper:

    com.github.pagehelper.PageHelper是一款好用的开源免费的Mybatis第三方物理分页插件。

    PageHelper是一款好用的开源免费的Mybatis第三方物理分页插件,其实我并不想加上好用两个字,但是为了表扬插件作者开源免费的崇高精神,我毫不犹豫的加上了好用一词作为赞美。

    原本以为分页插件,应该是很简单的,然而PageHelper比我想象的要复杂许多,它做的很强大,也很彻底,强大到使用者可能并不需要这么多功能,彻底到一参可以两用。但是,我认为,作为分页插件,完成物理分页任务是根本,其它的很多智能并不是必要的,保持它够傻够憨,专业术语叫stupid,简单就是美。

    官方网址:https://pagehelper.github.io/

    2.下面我们就是使用的方法了

    2.1引入依赖

    导入依赖

             <dependency>
        	        <groupId>com.github.pagehelper</groupId>
        	        <artifactId>pagehelper</artifactId>
        	        <version>4.1.0</version>
        	    </dependency>    
    

    2.2增加配置文件

    在你的配置文件的包(随便什么包都行)    新建MyBatisConfig 类

    @Configuration
    public class MyBatisConfig {
    	@Bean
    	public PageHelper pageHelper(){
    		PageHelper pageHelper = new PageHelper();
    		Properties p = new Properties();
    		 /**
             *设置为true时,会将RowBounds第一个参数offset当成pageNum页码使用
             */
    		p.setProperty("offsetAsPageNum","true");
    		/**
             *设置为true时,使用RowBounds分页会进行count查询
             */
    		p.setProperty("rowBoundsWithCount","true");
    		p.setProperty("reasonable","true");
    		pageHelper.setProperties(p);
    		return pageHelper;
    	}
    }
    

      

    2.3包装类

    在你查询全部信息方法前,例如我

    方法前添加这个包装类
    PageHelper.startPage(page, size);
    
    //我的示例
    
      /**
         * 分页接口
         *
         * @param page 当前第几页,默认第一页
         * @param size 每页显示几条
         */
        @GetMapping("page")
        public Object TestGetVideoALl(@RequestParam(value = "page", defaultValue = "1") int page,
                                      @RequestParam(value = "size", defaultValue = "10") int size) {
            PageHelper.startPage(page, size);
            List<Video> list =  videoService.GetVideoAll();
            PageInfo<Video> pageInfo = new PageInfo<>(list);
            Map<String, Object> data = new HashMap<>();
            data.put("total_size",pageInfo.getTotal());//总条数
            data.put("tatal_page",pageInfo.getPages());//总页数
            data.put("current_page",page);//当前页
            data.put("data",pageInfo.getList());//数据
            return data;
        }
    

     

    2.4 PageInfo类属性

    对于该类解析摘抄于 https://blog.csdn.net/sinat_42338962/article/details/84314428

    当前页 
    private int pageNum;
    每页的数量  
    private int pageSize;  
    当前页的数量  
    private int size;  
    //由于startRow和endRow不常用,这里说个具体的用法  
    //可以在页面中"显示startRow到endRow 共size条数据"  
    
    当前页面第一个元素在数据库中的行号  
    private int startRow;  
    当前页面最后一个元素在数据库中的行号  
    private int endRow;  
    总记录数  
    private long total;  
    总页数  
    private int pages;  
    结果集  
    private List<T> list;  
    
    第一页  
    private int firstPage;  
    前一页  
    private int prePage;  
    
    是否为第一页  
    private boolean isFirstPage = false;  
    是否为最后一页  
    private boolean isLastPage = false;  
    是否有前一页  
    private boolean hasPreviousPage = false;  
    是否有下一页  
    private boolean hasNextPage = false;  
    导航页码数  
    private int navigatePages;  
    所有导航页号  
    private int[] navigatepageNums;  
    后台分页
    
    服务器端
    service
    public PageInfo<T>  methodName(int pageNum, int pageSize) {
    //1 设置分页
    		PageHelper.startPage(pageNum, pageSize);
    		//2 查询
    		List<T> list =TMapper.mapperMethod();
    		//3 返回
    		return new PageInfo<>(list);
    	}
    Web
    public @ResponseBody DataGridResultInfo methodName (Vovo){
    		//1 查询
    		PageInfo<T> pageInfo = service. methodName (vo.getPage(), vo.getRows());
    		//2 封装
    		return new DataGridBean(pageInfo.getTotal() , pageInfo.getList() );
    	}
    
    浏览器端
    Datagrid
    
    $(function(){
    		//绘制datagrid
    		//1 准备数据
    		// 1.1 列列表
    		var columnArr = [[
    		                  {field:'字段名1',title:'标题1',80}, 
    		                  {field:'字段名2',title:'标题2',80,
    		                	  formatter:function(value,rows,index){
    								//filed匹配值(当前的值),当前行,当前行号
    		                		  return value.info;
    		                	  }
    		                  }
    		                  ]];
    		// 1.2 工具条
    		var toolbarArr = [
    							{
    								iconCls: 'icon-add',//按钮图标
    								text : '添加用户',
    								handler: showadduser//方法名
    							}
    		                  ];
    		// 1.3 请求路径
    		var url = "……";
    		
    		//2 准备参数
    		var options = {
    			"columns":columnArr,
    			"toolbar":toolbarArr,
    			"striped":true,				//隔行换色
    			"idField":"id",				//标识字段
    			"url":url,					//请求路径
    			"pagination":true,
    			"rownumbers":true,
    			"pageSize":2,
    			"pageList":[2,4,6,8]
    		};
    		
    		//3 绘制
    		$("#id值").datagrid( options );
    		
    	});
    
    感觉这个很简单,没什么好写的
    不用工具
    <c:forEach items="${pageInfo.list}" var="p">
          <tr>
              <td>${p.属性1}</td>
    <td>${p.属性2}</td>
    <td>${p.属性…}</td>
    </tr>
    </c:forEach>
    

      

    2.5基本原理

    sqlsessionFactory -> sqlSession-> executor -> mybatis sql statement
    

    通过mybatis plugin 增加拦截器,然后拼装分页 org.apache.ibatis.plugin.Interceptor

    所以我们想做分页就很简单了很多,避开了很繁琐的代码

  • 相关阅读:
    Jquery 公告 滚动+AJAX后台得到数据。
    图片上添加文字。
    javascript的window.onload与jquery的$(document).ready()
    后台JS写法
    Ajax xmlhttprequest原理(一)
    SQL语句二次排序。先根据是否置顶字段。再根据最后更新时间排序。
    引以为戒的SQL语句写法
    C#中var关键字怎么用 ~
    上传文件 解析
    简易公告
  • 原文地址:https://www.cnblogs.com/liujunwei/p/11570476.html
Copyright © 2011-2022 走看看