PageHelper在springboot中的使用方式
PageHelper的使用方法
第一步、導(dǎo)入相對(duì)應(yīng)的坐標(biāo)和包
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper-spring-boot-starter</artifactId>
<version>${pagehelper.version}</version>
</dependency>
第二步、配置文件的配置
pagehelper: helper-dialect: mysql reasonable: true support-methods-arguments: true params: count=countsql
參數(shù)解釋:
- helper-dialect:指定數(shù)據(jù)庫,不指定的話會(huì)默認(rèn)自動(dòng)檢測(cè)數(shù)據(jù)庫類型
- reasonable:是否啟用分頁合理化。如果啟用,當(dāng)pagenum<1時(shí),會(huì)自動(dòng)查詢第一頁的數(shù)據(jù),當(dāng)pagenum>pages時(shí),自動(dòng)查詢最后一頁數(shù)據(jù);不啟用的,以上兩種情況都會(huì)返回空數(shù)據(jù)
- support-methods-arguments:默認(rèn)值false,分頁插件會(huì)從查詢方法的參數(shù)值中,自動(dòng)根據(jù)上面 params 配置的字段中取值,查找到合適的值時(shí)就會(huì)自動(dòng)分頁。(copy來的,因?yàn)槲乙膊恢涝趺慈ソ忉專?/li>
- params:用于從對(duì)象中根據(jù)屬性名取值, 可以配置 pageNum,pageSize,count,pageSizeZero,reasonable,不配置映射的用默認(rèn)值, 默認(rèn)值為pageNum=pageNum;pageSize=pageSize;count=countSql;reasonable=reasonable;pageSizeZero=pageSizeZero
第三步、方法調(diào)用
使用PageHelper.startPage 靜態(tài)方法調(diào)用startPage :
特點(diǎn):
1.靜態(tài)方法,傳遞兩個(gè)參數(shù)(當(dāng)前頁碼,每頁查詢條數(shù))
2.使用pageHelper 分頁的時(shí)候,不再關(guān)注分頁語句,查詢?nèi)康恼Z句
3.自動(dòng)的對(duì)PageHelper.startPage 方法下的第一個(gè)sql 查詢進(jìn)行分頁
PageHelper.startPage(1,5); //緊跟著的第一個(gè)select 方法會(huì)被分頁 List list = countryMapper.findAll();
也就是說再Service層PageHelper.startPage(1,5);語句后一定是緊跟查詢語句。
- 方法一:使用service查詢到的結(jié)果存儲(chǔ)在request域中
private void selectAllUsers(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
{
String num=request.getParameter("num");
if(null==num)
{
num="1";
}
// Page PageInfo
Page<?> page=PageHelper.startPage(Integer.parseInt(num),5); //設(shè)置第幾條記錄開始,多少條記錄為一頁
//通過userService獲取user的信息,其sql語句為"select * from user" 但因pagehelp已經(jīng)注冊(cè)為插件,所以pagehelp會(huì)在原sql語句上增加limit,從而實(shí)現(xiàn)分頁
List<Person> persons=userService.getAllUsersBypageHelper(); //因而獲得的是分好頁的結(jié)果集
PageInfo<?> pageHelper=page.toPageInfo(); //獲取頁面信息的對(duì)象,里面封裝了許多頁面的信息 如:總條數(shù),當(dāng)前頁碼,需顯示的導(dǎo)航頁等等
request.setAttribute("persons",persons); request.setAttribute("pagehelper",pageHelper);
request.getRequestDispatcher("/persons.jsp").forward(request,response);
}- 方法二:使用service查詢到的結(jié)果存儲(chǔ)在自定義的類中然后返回給前端
public PageResult<List<ProjectListVO>> queryByProjectName(Integer pageNo, Integer pageSize, String projectName) {
PageResult<List<ProjectListVO>> result = new PageResult<>();
try {
PageHelper.startPage(pageNo, pageSize);
List<ProjectListVO> projectVOList = projectMapper.queryByProjectName(projectName); //設(shè)置完上邊的PageHelper之后查詢的時(shí)候,查詢語句會(huì)自動(dòng)加入 limits startpage count,查詢結(jié)果就是正確的結(jié)果
PageInfo<ProjectListVO> pageInfo = new PageInfo<>(projectVOList);
result.setTotal(pageInfo.getTotal());
result.setPages(pageInfo.getPages());
result.setCurrent(pageInfo.getPageNum());
result.setSize(pageInfo.getPageSize());
result.setResult(projectVOList);
result.success("查詢成功!");
} finally {
PageHelper.clearPage();
}
return result;
}關(guān)于PageInfo這個(gè)類,源碼如下:
public class PageInfo implements Serializable {
private static final long serialVersionUID = 1L;
//當(dāng)前頁
private int pageNum;
//每頁的數(shù)量
private int pageSize;
//當(dāng)前頁的數(shù)量
private int size;
//由于startRow 和endRow 不常用,這里說個(gè)具體的用法
//可以在頁面中"顯示startRow 到endRow 共size 條數(shù)據(jù)"
//當(dāng)前頁面第一個(gè)元素在數(shù)據(jù)庫中的行號(hào)
private int startRow;
//當(dāng)前頁面最后一個(gè)元素在數(shù)據(jù)庫中的行號(hào)
private int endRow;
//總記錄數(shù)
private long total;
//總頁數(shù)
private int pages;
//結(jié)果集
private List list;
//前一頁
private int prePage;
//下一頁
private int nextPage;
//是否為第一頁
private boolean isFirstPage = false;
//是否為最后一頁
private boolean isLastPage = false;
//是否有前一頁
private boolean hasPreviousPage = false;
//是否有下一頁
private boolean hasNextPage = false;
//導(dǎo)航頁碼數(shù)
private int navigatePages;
傳智播客——專注于Java、.Net 和Php、網(wǎng)頁平面設(shè)計(jì)工程師的培訓(xùn)
北京市昌平區(qū)建材城西路金燕龍辦公樓一層電話:400-618-9090
//所有導(dǎo)航頁號(hào)
private int[] navigatepageNums;
//導(dǎo)航條上的第一頁
private int navigateFirstPage;
//導(dǎo)航條上的最后一頁
private int navigateLastPage;
}第四步、關(guān)于controller中的使用
- 對(duì)于上邊的方法一:前端的頁面中可以直接從request域中獲取相對(duì)應(yīng)的結(jié)果。
- 對(duì)于上邊的方法二:
@ApiOperation("根據(jù)項(xiàng)目名查詢項(xiàng)目信息")
@RequestMapping(value = "/queryByProjectName", method = RequestMethod.GET)
public PageResult<List<ProjectListVO>> queryByProjectName(@RequestParam(defaultValue = "1", value = "pageNo") Integer pageNo,
@RequestParam(defaultValue = "10", value = "pageSize") Integer pageSize,
@RequestParam(name = "projectName") String projectName) {
if (StringUtils.isEmpty(projectName)) {
throw new DareException("參數(shù)錯(cuò)誤!");
}
PageResult<List<ProjectListVO>> result = new PageResult<>();
try {
projectName = "%" + projectName + "%";
// System.out.println(projectName);
result = projectService.queryByProjectName(pageNo, pageSize, projectName);
} catch (Exception e) {
e.printStackTrace();
log.error(e.getMessage());
result.setSuccess(false);
result.setMessage("操作失??!");
}
return result;
}
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Java比較兩個(gè)對(duì)象中全部屬性值是否相等的方法
本文主要介紹了Java比較兩個(gè)對(duì)象中全部屬性值是否相等的方法,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-08-08
Java面試突擊為什么要用HTTPS及它的優(yōu)點(diǎn)
這篇文章主要介紹了Java面試突擊為什么要用HTTPS及它的優(yōu)點(diǎn),文章圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的小伙伴可以參考一下2022-07-07
Java中char數(shù)組(字符數(shù)組)與字符串String類型的轉(zhuǎn)換方法
這篇文章主要介紹了Java中char數(shù)組(字符數(shù)組)與字符串String類型的轉(zhuǎn)換方法,涉及Java中toCharArray與valueOf方法的使用技巧,需要的朋友可以參考下2015-12-12
springboot整合easy-es實(shí)現(xiàn)數(shù)據(jù)的增刪改查的示例代碼
Easy-Es是一款基于ElasticSearch官方提供的RestHighLevelClient打造的低碼開發(fā)框架,本文主要介紹了springboot整合easy-es實(shí)現(xiàn)數(shù)據(jù)的增刪改查的示例代碼,具有一定的參考價(jià)值,感興趣的可以了解一下2024-03-03

