若依管理系统源码分析-分页的实现以及post请求时的分页
場(chǎng)景
官方示例分頁實(shí)現(xiàn)
前端調(diào)用實(shí)現(xiàn)
// 一般在查詢參數(shù)中定義分頁變量 queryParams: {pageNum: 1,pageSize: 10 },// 頁面添加分頁組件,傳入分頁變量 <paginationv-show="total>0":total="total":page.sync="queryParams.pageNum":limit.sync="queryParams.pageSize"@pagination="getList" />// 調(diào)用后臺(tái)方法,傳入?yún)?shù) 獲取結(jié)果 listUser(this.queryParams).then(response => {this.userList = response.rows;this.total = response.total;} );后臺(tái)邏輯實(shí)現(xiàn)
@PostMapping("/list") @ResponseBody public TableDataInfo list(User user) {startPage();? // 此方法配合前端完成自動(dòng)分頁List<User> list = userService.selectUserList(user);return getDataTable(list); }注:
博客:
https://blog.csdn.net/badao_liumang_qizhi
關(guān)注公眾號(hào)
霸道的程序猿
獲取編程相關(guān)電子書、教程推送與免費(fèi)下載。
實(shí)現(xiàn)
使用若依自動(dòng)生成的代碼
前端使用pagination控件,基于Bootstrap的輕量級(jí)表格插件 BootstrapTable
??? <paginationv-show="total>0":total="total":page.sync="queryParams.pageNum":limit.sync="queryParams.pageSize"@pagination="getList"/>其中pageNum代表當(dāng)前頁號(hào),即第幾頁,pageSize代表每頁顯示的條數(shù)。
將此倆個(gè)參數(shù)封裝進(jìn)queryParams對(duì)象中,此對(duì)象也包含前端要傳遞給后端的查詢參數(shù)。
首先要對(duì)此查詢對(duì)象進(jìn)行聲明
????? // 查詢參數(shù)queryParams: {pageNum: 1,pageSize: 10,gh: undefined,xm: undefined,lxyf: undefined,},并且給pageNum和pageSize設(shè)置默認(rèn)值,其他參數(shù)是綁定的查詢參數(shù),比如工號(hào)、姓名等。
上面分頁控件的進(jìn)行分頁時(shí)會(huì)執(zhí)行g(shù)etList方法,此方法是請(qǐng)求后臺(tái)數(shù)據(jù)的方法。
在此方法中
??? getList() {listLxsz(this.queryParams).then((response) => {this.lxszList = response.rows;this.total = response.total;});},調(diào)用js接口方法的listLxsz方法并將查詢參數(shù)對(duì)象作為參數(shù)傳遞。
其中就包含分頁所需的兩個(gè)參數(shù)。
來到j(luò)s對(duì)應(yīng)的方法listLxsz中
export function listLxsz(query) {return request({url: '/kqgl/lxsz/list',method: 'get',params: query}) }其中request是封裝的axios的對(duì)象,用來發(fā)送請(qǐng)求。
這里是get請(qǐng)求并且傳遞了查詢參數(shù)對(duì)象。
來到SpringBoot對(duì)應(yīng)的接口中
??? @GetMapping("/list")public TableDataInfo list(KqLxsz kqLxsz){startPage();List<KqLxsz> list = kqLxszService.selectKqLxszList(kqLxsz);return getDataTable(list);}后臺(tái)需要調(diào)用startPage方法,并且此方法必須放在查詢出數(shù)據(jù)的前一行。
list是后臺(tái)查詢的需要返回前端的數(shù)據(jù),此方法必須放在此查詢之前。
進(jìn)入到startPage方法中
??? protected void startPage(){PageDomain pageDomain = TableSupport.buildPageRequest();Integer pageNum = pageDomain.getPageNum();Integer pageSize = pageDomain.getPageSize();if (StringUtils.isNotNull(pageNum) && StringUtils.isNotNull(pageSize)){String orderBy = SqlUtil.escapeOrderBySql(pageDomain.getOrderBy());PageHelper.startPage(pageNum, pageSize, orderBy);}}分析:
最終是調(diào)用的MyBatis的PageHelper來進(jìn)行分頁,只需要給其傳遞分頁所需的兩個(gè)參數(shù)和排序字段即可。
那么這兩個(gè)分頁參數(shù)時(shí)來自pageDomain這個(gè)實(shí)體類。
進(jìn)入到生成這個(gè)實(shí)體類的方法TableSupport.buildPageRequest中
??? public static PageDomain buildPageRequest()
??? {
??????? return getPageDomain();
??? }
返回的是getPageDomain這個(gè)方法的返回值,進(jìn)入到該方法
??? public static PageDomain getPageDomain(){PageDomain pageDomain = new PageDomain();pageDomain.setPageNum(ServletUtils.getParameterToInt(PAGE_NUM));pageDomain.setPageSize(ServletUtils.getParameterToInt(PAGE_SIZE));pageDomain.setOrderByColumn(ServletUtils.getParameter(ORDER_BY_COLUMN));pageDomain.setIsAsc(ServletUtils.getParameter(IS_ASC));return pageDomain;}可以看到此實(shí)體類的分頁的參數(shù)是從工具類ServletUtils中獲取的參數(shù)
其中ServletUtils是客戶端工具類
package com.ruoyi.common.utils;import java.io.IOException; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; import org.springframework.web.context.request.RequestAttributes; import org.springframework.web.context.request.RequestContextHolder; import org.springframework.web.context.request.ServletRequestAttributes; import com.ruoyi.common.core.text.Convert;/*** 客戶端工具類** @author ruoyi*/ public class ServletUtils {/*** 獲取String參數(shù)*/public static String getParameter(String name){return getRequest().getParameter(name);}/*** 獲取String參數(shù)*/public static String getParameter(String name, String defaultValue){return Convert.toStr(getRequest().getParameter(name), defaultValue);}/*** 獲取Integer參數(shù)*/public static Integer getParameterToInt(String name){return Convert.toInt(getRequest().getParameter(name));}/*** 獲取Integer參數(shù)*/public static Integer getParameterToInt(String name, Integer defaultValue){return Convert.toInt(getRequest().getParameter(name), defaultValue);}/*** 獲取request*/public static HttpServletRequest getRequest(){return getRequestAttributes().getRequest();}/*** 獲取response*/public static HttpServletResponse getResponse(){return getRequestAttributes().getResponse();}/*** 獲取session*/public static HttpSession getSession(){return getRequest().getSession();}public static ServletRequestAttributes getRequestAttributes(){RequestAttributes attributes = RequestContextHolder.getRequestAttributes();return (ServletRequestAttributes) attributes;}/*** 將字符串渲染到客戶端** @param response 渲染對(duì)象* @param string 待渲染的字符串* @return null*/public static String renderString(HttpServletResponse response, String string){try{response.setStatus(200);response.setContentType("application/json");response.setCharacterEncoding("utf-8");response.getWriter().print(string);}catch (IOException e){e.printStackTrace();}return null;}/*** 是否是Ajax異步請(qǐng)求** @param request*/public static boolean isAjaxRequest(HttpServletRequest request){String accept = request.getHeader("accept");if (accept != null && accept.indexOf("application/json") != -1){return true;}String xRequestedWith = request.getHeader("X-Requested-With");if (xRequestedWith != null && xRequestedWith.indexOf("XMLHttpRequest") != -1){return true;}String uri = request.getRequestURI();if (StringUtils.inStringIgnoreCase(uri, ".json", ".xml")){return true;}String ajax = request.getParameter("__ajax");if (StringUtils.inStringIgnoreCase(ajax, "json", "xml")){return true;}return false;} }
獲取分頁參數(shù)時(shí)調(diào)用的getParameterToInt定義如下
調(diào)用了getRequest方法,此方法定義如下
??? /*** 獲取request*/public static HttpServletRequest getRequest(){return getRequestAttributes().getRequest();}此方法是獲取request請(qǐng)求參數(shù)
而request請(qǐng)求對(duì)象是來自會(huì)話session,所以在getRequestAttributes中
??? public static ServletRequestAttributes getRequestAttributes(){RequestAttributes attributes = RequestContextHolder.getRequestAttributes();return (ServletRequestAttributes) attributes;}所以最終在進(jìn)行g(shù)et請(qǐng)求時(shí),直接將分頁參數(shù)作為參數(shù)傳遞給后臺(tái)即可。
因?yàn)樵趃et請(qǐng)求時(shí)會(huì)將參數(shù)拼接在url中,這樣后臺(tái)就能從請(qǐng)求中獲取分頁參數(shù)并傳遞給MyBatis的
pageHelper實(shí)現(xiàn)分頁。
如果是post請(qǐng)求那,post請(qǐng)求時(shí)傳遞的是一個(gè)實(shí)體,如果將分頁參數(shù)放在實(shí)體中,則后臺(tái)沒法通過請(qǐng)求獲取分頁參數(shù)。
可以通過在post請(qǐng)求的url中添加分頁參數(shù)實(shí)現(xiàn)
比如在如下前端請(qǐng)求時(shí)
??? getList() {listDdjl(this.queryParams).then((response) => {this.ddjlList = response.rows;this.total = response.total;this.loading = false;});},最終調(diào)用請(qǐng)求數(shù)據(jù)的方法
export function listDdjl(query) {return request({url: '/kqgl/ddjl/getListBySx?pageNum='+query.pageNum+'&pageSize='+query.pageSize,method: 'post',data: query}) }請(qǐng)求方式是post請(qǐng)求,分頁參數(shù)存放在實(shí)體中,可以通過在url中手動(dòng)拼接分頁參數(shù)的方式進(jìn)行傳遞分頁參數(shù)。
總結(jié)
以上是生活随笔為你收集整理的若依管理系统源码分析-分页的实现以及post请求时的分页的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: MySql中怎样使用case-when实
- 下一篇: 若依管理系统源码分析-导出Excel时怎