PageHelper在springboot中的使用方式
PageHelper的使用方法
第一步、導入相對應的坐標和包
<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ù)庫,不指定的話會默認自動檢測數(shù)據(jù)庫類型
- reasonable:是否啟用分頁合理化。如果啟用,當pagenum<1時,會自動查詢第一頁的數(shù)據(jù),當pagenum>pages時,自動查詢最后一頁數(shù)據(jù);不啟用的,以上兩種情況都會返回空數(shù)據(jù)
- support-methods-arguments:默認值false,分頁插件會從查詢方法的參數(shù)值中,自動根據(jù)上面 params 配置的字段中取值,查找到合適的值時就會自動分頁。(copy來的,因為我也不知道怎么去解釋)
- params:用于從對象中根據(jù)屬性名取值, 可以配置 pageNum,pageSize,count,pageSizeZero,reasonable,不配置映射的用默認值, 默認值為pageNum=pageNum;pageSize=pageSize;count=countSql;reasonable=reasonable;pageSizeZero=pageSizeZero
第三步、方法調用
使用PageHelper.startPage 靜態(tài)方法調用startPage :
特點:
1.靜態(tài)方法,傳遞兩個參數(shù)(當前頁碼,每頁查詢條數(shù))
2.使用pageHelper 分頁的時候,不再關注分頁語句,查詢全部的語句
3.自動的對PageHelper.startPage 方法下的第一個sql 查詢進行分頁
PageHelper.startPage(1,5); //緊跟著的第一個select 方法會被分頁 List list = countryMapper.findAll();
也就是說再Service層PageHelper.startPage(1,5);語句后一定是緊跟查詢語句。
- 方法一:使用service查詢到的結果存儲在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); //設置第幾條記錄開始,多少條記錄為一頁 //通過userService獲取user的信息,其sql語句為"select * from user" 但因pagehelp已經(jīng)注冊為插件,所以pagehelp會在原sql語句上增加limit,從而實現(xiàn)分頁 List<Person> persons=userService.getAllUsersBypageHelper(); //因而獲得的是分好頁的結果集 PageInfo<?> pageHelper=page.toPageInfo(); //獲取頁面信息的對象,里面封裝了許多頁面的信息 如:總條數(shù),當前頁碼,需顯示的導航頁等等 request.setAttribute("persons",persons); request.setAttribute("pagehelper",pageHelper); request.getRequestDispatcher("/persons.jsp").forward(request,response); }
- 方法二:使用service查詢到的結果存儲在自定義的類中然后返回給前端
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); //設置完上邊的PageHelper之后查詢的時候,查詢語句會自動加入 limits startpage count,查詢結果就是正確的結果 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; }
關于PageInfo這個類,源碼如下:
public class PageInfo implements Serializable { private static final long serialVersionUID = 1L; //當前頁 private int pageNum; //每頁的數(shù)量 private int pageSize; //當前頁的數(shù)量 private int size; //由于startRow 和endRow 不常用,這里說個具體的用法 //可以在頁面中"顯示startRow 到endRow 共size 條數(shù)據(jù)" //當前頁面第一個元素在數(shù)據(jù)庫中的行號 private int startRow; //當前頁面最后一個元素在數(shù)據(jù)庫中的行號 private int endRow; //總記錄數(shù) private long total; //總頁數(shù) private int pages; //結果集 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; //導航頁碼數(shù) private int navigatePages; 傳智播客——專注于Java、.Net 和Php、網(wǎng)頁平面設計工程師的培訓 北京市昌平區(qū)建材城西路金燕龍辦公樓一層電話:400-618-9090 //所有導航頁號 private int[] navigatepageNums; //導航條上的第一頁 private int navigateFirstPage; //導航條上的最后一頁 private int navigateLastPage; }
第四步、關于controller中的使用
- 對于上邊的方法一:前端的頁面中可以直接從request域中獲取相對應的結果。
- 對于上邊的方法二:
@ApiOperation("根據(jù)項目名查詢項目信息") @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ù)錯誤!"); } 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; }
總結
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關文章
Java在排序數(shù)組中查找元素的第一個和最后一個位置的方法詳解
相信大家在操作Java的時候經(jīng)常會要在一個數(shù)組(無序)中查找元素的第一個和最后一個位置,下面這篇文章主要給大家介紹了關于Java在排序數(shù)組中查找元素的第一個和最后一個位置的相關資料,需要的朋友可以參考下2024-01-01Java數(shù)據(jù)結構之圖的基礎概念和數(shù)據(jù)模型詳解
在現(xiàn)實生活中,有許多應用場景會包含很多點以及點點之間的連接,而這些應用場景我們都可以用即將要學習的圖這種數(shù)據(jù)結構去解決。本文主要介紹了圖的基礎概念和數(shù)據(jù)模型,感興趣的可以了解一下2022-11-11解析Spring Boot內嵌tomcat關于getServletContext().getRealPath獲取得到臨時
大家都很糾結這個問題在使用getServletContext().getRealPath()得到的是臨時文件的路徑,每次重啟服務,這個臨時文件的路徑還好變更,下面小編通過本文給大家分享Spring Boot內嵌tomcat關于getServletContext().getRealPath獲取得到臨時路徑的問題,一起看看吧2021-05-05SpringBoot整合Spring Security構建安全的Web應用
pring Security是一個強大的身份驗證和訪問控制框架,本文主要介紹了SpringBoot整合Spring Security構建安全的Web應用,具有一定的參考價值,感興趣的可以了解一下2024-01-01java實現(xiàn)token無感刷新+處理并發(fā)的后端方案
在Web應用中,Token用于身份驗證和會話管理,但當Token過期時,可能會導致用戶在提交表單或進行操作時突然被重定向到登錄頁面,本文就來介紹一下java實現(xiàn)token無感刷新+處理并發(fā)的后端方案,感興趣的可以了解一下2024-11-112022?最新?IntelliJ?IDEA?詳細配置步驟演示(推薦)
作為一名開發(fā)人員,第一肯定是選擇一款趁手的開發(fā)利器,本人使用?Java?偏多,這里推薦使用?IntelliJ?IDEA,?俗稱神級開發(fā)工具,具體的安裝過程就不過多贅述了,有需要了解的朋友可以參考下本文2022-09-09