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));
}
就可以实现带待参查询分页。