基于mybatis--pageHelper的分页工具类实现带参查询工具类pageInfo

it2024-08-06  47

mybatis的分页工具已经写得很完美了,还可以根据各种数据库方言进行改变,唯一的遗憾的就是不支持带参查询。我将其pageInfo改进了一下。实现了带参查询~

记录一下:

package com.yyc.util; import com.github.pagehelper.PageHelper; import org.springframework.web.context.request.RequestContextHolder; import org.springframework.web.context.request.ServletRequestAttributes; import javax.servlet.http.HttpServletRequest; import java.io.UnsupportedEncodingException; import java.net.URLEncoder; import java.util.Enumeration; import java.util.List; public class PageInfo<T> extends com.github.pagehelper.PageInfo<T> { private static String url;// 主要是用来获取查询的参数 public PageInfo(List<T> list) { super(list); } public static String startPage(){ // 从本地线程中获取请求 HttpServletRequest request = ((ServletRequestAttributes) (RequestContextHolder.currentRequestAttributes())).getRequest(); // 因为pageHelper里面没有给pageNum和pageSize赋初始值 // 从请求中接收当前页号 String pageNumStr = request.getParameter("pageNum"); int pageNum = Integer.parseInt(Util.isEmpty(pageNumStr) ? "1" : pageNumStr); // // // 从请求中接收当前的记录数 String pageSizeStr = request.getParameter("pageSize"); int pageSize = Integer.parseInt(Util.isEmpty(pageSizeStr) ? "5" : pageSizeStr); PageHelper.startPage(pageNum, pageSize); // 从请求当中获取请求地址 url = request.getRequestURI() + "?1=1"; // 从当前请求中获取请求参数 Enumeration<String> parameterNames = request.getParameterNames(); while (parameterNames.hasMoreElements()) { // 获取每一个请求参数的名字 String name = parameterNames.nextElement(); // 获取每一个请求参数的值 String value = request.getParameter(name); // 在拼接参数的时候先要过滤掉常驻的参数,在进行拼接 if (!"1".equals(name) && !"pageNum".equals(name) && !"pageSize".equals(name) && Util.isNotEmpty(value)) { // 如果查询条件中带有中文的话,浏览器中编码集不一致,可能造成请求中带有乱码从而导致无法向后端发起一个中确的请求 // 所以这里要讲value转一下编码 try { value = URLEncoder.encode(value, "UTF-8"); } catch (UnsupportedEncodingException e) { e.printStackTrace(); value = ""; } url += "&" + name + "=" + value; } } return url; } public String getUrl() { return url; } }

使用

PageInfo.startPage();// 这里的PageInfo都是自己写的 // 调用service层里面的查询全部方法,和mybatis-pagehelper一样,只传入一个list即可 PageInfo pageInfo = new PageInfo<>(list);

查询的参数不用管,直接通过url来获取了。

controller直接如下写:

@RequestMapping("/list") public PageInfo<Employee> list(Employee employee) { PageInfo.startPage(); return new PageInfo<>(employeeService.list(employee)); }

就可以实现带待参查询分页。

最新回复(0)