若依管理系统源码分析-分页的实现以及post请求时的分页
場景
官方示例分頁實現
前端調用實現
// 一般在查詢參數中定義分頁變量 queryParams: {pageNum: 1,pageSize: 10 },// 頁面添加分頁組件,傳入分頁變量 <paginationv-show="total>0":total="total":page.sync="queryParams.pageNum":limit.sync="queryParams.pageSize"@pagination="getList" />// 調用后臺方法,傳入參數 獲取結果 listUser(this.queryParams).then(response => {this.userList = response.rows;this.total = response.total;} );后臺邏輯實現
@PostMapping("/list") @ResponseBody public TableDataInfo list(User user) {startPage();? // 此方法配合前端完成自動分頁List<User> list = userService.selectUserList(user);return getDataTable(list); }注:
博客:
https://blog.csdn.net/badao_liumang_qizhi
關注公眾號
霸道的程序猿
獲取編程相關電子書、教程推送與免費下載。
實現
使用若依自動生成的代碼
前端使用pagination控件,基于Bootstrap的輕量級表格插件 BootstrapTable
??? <paginationv-show="total>0":total="total":page.sync="queryParams.pageNum":limit.sync="queryParams.pageSize"@pagination="getList"/>其中pageNum代表當前頁號,即第幾頁,pageSize代表每頁顯示的條數。
將此倆個參數封裝進queryParams對象中,此對象也包含前端要傳遞給后端的查詢參數。
首先要對此查詢對象進行聲明
????? // 查詢參數queryParams: {pageNum: 1,pageSize: 10,gh: undefined,xm: undefined,lxyf: undefined,},并且給pageNum和pageSize設置默認值,其他參數是綁定的查詢參數,比如工號、姓名等。
上面分頁控件的進行分頁時會執行getList方法,此方法是請求后臺數據的方法。
在此方法中
??? getList() {listLxsz(this.queryParams).then((response) => {this.lxszList = response.rows;this.total = response.total;});},調用js接口方法的listLxsz方法并將查詢參數對象作為參數傳遞。
其中就包含分頁所需的兩個參數。
來到js對應的方法listLxsz中
export function listLxsz(query) {return request({url: '/kqgl/lxsz/list',method: 'get',params: query}) }其中request是封裝的axios的對象,用來發送請求。
這里是get請求并且傳遞了查詢參數對象。
來到SpringBoot對應的接口中
??? @GetMapping("/list")public TableDataInfo list(KqLxsz kqLxsz){startPage();List<KqLxsz> list = kqLxszService.selectKqLxszList(kqLxsz);return getDataTable(list);}后臺需要調用startPage方法,并且此方法必須放在查詢出數據的前一行。
list是后臺查詢的需要返回前端的數據,此方法必須放在此查詢之前。
進入到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);}}分析:
最終是調用的MyBatis的PageHelper來進行分頁,只需要給其傳遞分頁所需的兩個參數和排序字段即可。
那么這兩個分頁參數時來自pageDomain這個實體類。
進入到生成這個實體類的方法TableSupport.buildPageRequest中
??? public static PageDomain buildPageRequest()
??? {
??????? return getPageDomain();
??? }
返回的是getPageDomain這個方法的返回值,進入到該方法
??? 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;}可以看到此實體類的分頁的參數是從工具類ServletUtils中獲取的參數
其中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參數*/public static String getParameter(String name){return getRequest().getParameter(name);}/*** 獲取String參數*/public static String getParameter(String name, String defaultValue){return Convert.toStr(getRequest().getParameter(name), defaultValue);}/*** 獲取Integer參數*/public static Integer getParameterToInt(String name){return Convert.toInt(getRequest().getParameter(name));}/*** 獲取Integer參數*/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 渲染對象* @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異步請求** @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;} }
獲取分頁參數時調用的getParameterToInt定義如下
調用了getRequest方法,此方法定義如下
??? /*** 獲取request*/public static HttpServletRequest getRequest(){return getRequestAttributes().getRequest();}此方法是獲取request請求參數
而request請求對象是來自會話session,所以在getRequestAttributes中
??? public static ServletRequestAttributes getRequestAttributes(){RequestAttributes attributes = RequestContextHolder.getRequestAttributes();return (ServletRequestAttributes) attributes;}所以最終在進行get請求時,直接將分頁參數作為參數傳遞給后臺即可。
因為在get請求時會將參數拼接在url中,這樣后臺就能從請求中獲取分頁參數并傳遞給MyBatis的
pageHelper實現分頁。
如果是post請求那,post請求時傳遞的是一個實體,如果將分頁參數放在實體中,則后臺沒法通過請求獲取分頁參數。
可以通過在post請求的url中添加分頁參數實現
比如在如下前端請求時
??? getList() {listDdjl(this.queryParams).then((response) => {this.ddjlList = response.rows;this.total = response.total;this.loading = false;});},最終調用請求數據的方法
export function listDdjl(query) {return request({url: '/kqgl/ddjl/getListBySx?pageNum='+query.pageNum+'&pageSize='+query.pageSize,method: 'post',data: query}) }請求方式是post請求,分頁參數存放在實體中,可以通過在url中手動拼接分頁參數的方式進行傳遞分頁參數。
總結
以上是生活随笔為你收集整理的若依管理系统源码分析-分页的实现以及post请求时的分页的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: MySql中怎样使用case-when实
- 下一篇: 若依管理系统源码分析-导出Excel时怎