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ù)庫(kù),不指定的話會(huì)默認(rèn)自動(dòng)檢測(cè)數(shù)據(jù)庫(kù)類型
- reasonable:是否啟用分頁(yè)合理化。如果啟用,當(dāng)pagenum<1時(shí),會(huì)自動(dòng)查詢第一頁(yè)的數(shù)據(jù),當(dāng)pagenum>pages時(shí),自動(dòng)查詢最后一頁(yè)數(shù)據(jù);不啟用的,以上兩種情況都會(huì)返回空數(shù)據(jù)
- support-methods-arguments:默認(rèn)值false,分頁(yè)插件會(huì)從查詢方法的參數(shù)值中,自動(dòng)根據(jù)上面 params 配置的字段中取值,查找到合適的值時(shí)就會(huì)自動(dòng)分頁(yè)。(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)前頁(yè)碼,每頁(yè)查詢條數(shù))
2.使用pageHelper 分頁(yè)的時(shí)候,不再關(guān)注分頁(yè)語句,查詢?nèi)康恼Z句
3.自動(dòng)的對(duì)PageHelper.startPage 方法下的第一個(gè)sql 查詢進(jìn)行分頁(yè)
PageHelper.startPage(1,5); //緊跟著的第一個(gè)select 方法會(huì)被分頁(yè) 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è)置第幾條記錄開始,多少條記錄為一頁(yè) //通過userService獲取user的信息,其sql語句為"select * from user" 但因pagehelp已經(jīng)注冊(cè)為插件,所以pagehelp會(huì)在原sql語句上增加limit,從而實(shí)現(xiàn)分頁(yè) List<Person> persons=userService.getAllUsersBypageHelper(); //因而獲得的是分好頁(yè)的結(jié)果集 PageInfo<?> pageHelper=page.toPageInfo(); //獲取頁(yè)面信息的對(duì)象,里面封裝了許多頁(yè)面的信息 如:總條數(shù),當(dāng)前頁(yè)碼,需顯示的導(dǎo)航頁(yè)等等 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)前頁(yè) private int pageNum; //每頁(yè)的數(shù)量 private int pageSize; //當(dāng)前頁(yè)的數(shù)量 private int size; //由于startRow 和endRow 不常用,這里說個(gè)具體的用法 //可以在頁(yè)面中"顯示startRow 到endRow 共size 條數(shù)據(jù)" //當(dāng)前頁(yè)面第一個(gè)元素在數(shù)據(jù)庫(kù)中的行號(hào) private int startRow; //當(dāng)前頁(yè)面最后一個(gè)元素在數(shù)據(jù)庫(kù)中的行號(hào) private int endRow; //總記錄數(shù) private long total; //總頁(yè)數(shù) private int pages; //結(jié)果集 private List list; //前一頁(yè) private int prePage; //下一頁(yè) private int nextPage; //是否為第一頁(yè) private boolean isFirstPage = false; //是否為最后一頁(yè) private boolean isLastPage = false; //是否有前一頁(yè) private boolean hasPreviousPage = false; //是否有下一頁(yè) private boolean hasNextPage = false; //導(dǎo)航頁(yè)碼數(shù) private int navigatePages; 傳智播客——專注于Java、.Net 和Php、網(wǎng)頁(yè)平面設(shè)計(jì)工程師的培訓(xùn) 北京市昌平區(qū)建材城西路金燕龍辦公樓一層電話:400-618-9090 //所有導(dǎo)航頁(yè)號(hào) private int[] navigatepageNums; //導(dǎo)航條上的第一頁(yè) private int navigateFirstPage; //導(dǎo)航條上的最后一頁(yè) private int navigateLastPage; }
第四步、關(guān)于controller中的使用
- 對(duì)于上邊的方法一:前端的頁(yè)面中可以直接從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)文章
SpringBoot自動(dòng)裝配之Condition深入講解
@Conditional表示僅當(dāng)所有指定條件都匹配時(shí),組件才有資格注冊(cè)。該@Conditional注釋可以在以下任一方式使用:作為任何@Bean方法的方法級(jí)注釋、作為任何類的直接或間接注釋的類型級(jí)別注釋@Component,包括@Configuration類、作為元注釋,目的是組成自定義構(gòu)造型注釋2023-01-01Java在排序數(shù)組中查找元素的第一個(gè)和最后一個(gè)位置的方法詳解
相信大家在操作Java的時(shí)候經(jīng)常會(huì)要在一個(gè)數(shù)組(無序)中查找元素的第一個(gè)和最后一個(gè)位置,下面這篇文章主要給大家介紹了關(guān)于Java在排序數(shù)組中查找元素的第一個(gè)和最后一個(gè)位置的相關(guān)資料,需要的朋友可以參考下2024-01-01Java數(shù)據(jù)結(jié)構(gòu)之圖的基礎(chǔ)概念和數(shù)據(jù)模型詳解
在現(xiàn)實(shí)生活中,有許多應(yīng)用場(chǎng)景會(huì)包含很多點(diǎn)以及點(diǎn)點(diǎn)之間的連接,而這些應(yīng)用場(chǎng)景我們都可以用即將要學(xué)習(xí)的圖這種數(shù)據(jù)結(jié)構(gòu)去解決。本文主要介紹了圖的基礎(chǔ)概念和數(shù)據(jù)模型,感興趣的可以了解一下2022-11-11解析Spring Boot內(nèi)嵌tomcat關(guān)于getServletContext().getRealPath獲取得到臨時(shí)
大家都很糾結(jié)這個(gè)問題在使用getServletContext().getRealPath()得到的是臨時(shí)文件的路徑,每次重啟服務(wù),這個(gè)臨時(shí)文件的路徑還好變更,下面小編通過本文給大家分享Spring Boot內(nèi)嵌tomcat關(guān)于getServletContext().getRealPath獲取得到臨時(shí)路徑的問題,一起看看吧2021-05-05SpringBoot整合Spring Security構(gòu)建安全的Web應(yīng)用
pring Security是一個(gè)強(qiáng)大的身份驗(yàn)證和訪問控制框架,本文主要介紹了SpringBoot整合Spring Security構(gòu)建安全的Web應(yīng)用,具有一定的參考價(jià)值,感興趣的可以了解一下2024-01-01Java 排序算法整合(冒泡,快速,希爾,拓?fù)?,歸并)
這篇文章主要介紹了Java 排序算法整合(冒泡,快速,希爾,拓?fù)?,歸并),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-09-09java實(shí)現(xiàn)token無感刷新+處理并發(fā)的后端方案
在Web應(yīng)用中,Token用于身份驗(yàn)證和會(huì)話管理,但當(dāng)Token過期時(shí),可能會(huì)導(dǎo)致用戶在提交表單或進(jìn)行操作時(shí)突然被重定向到登錄頁(yè)面,本文就來介紹一下java實(shí)現(xiàn)token無感刷新+處理并發(fā)的后端方案,感興趣的可以了解一下2024-11-112022?最新?IntelliJ?IDEA?詳細(xì)配置步驟演示(推薦)
作為一名開發(fā)人員,第一肯定是選擇一款趁手的開發(fā)利器,本人使用?Java?偏多,這里推薦使用?IntelliJ?IDEA,?俗稱神級(jí)開發(fā)工具,具體的安裝過程就不過多贅述了,有需要了解的朋友可以參考下本文2022-09-09