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
所以我們想做分頁就很簡單了很多,避開了很繁瑣的代碼
