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

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

原文地址:https://www.cnblogs.com/liujunwei/p/11570476.html