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',width:80}, 
		                  {field:'字段名2',title:'標題2',width: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

所以我們想做分頁就很簡單了很多,避開了很繁瑣的代碼


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM