一、PageHelper 分页插件简介
- PageHelper是MyBatis中非常方便的第三方分页插件
- 官方文档:
https://github.com/pagehelper/Mybatis-PageHelper/blob/master/README_zh.md - 我们可以对照官方文档的说明,快速的使用插件
二、PageHelper的使用步骤 - 导入相关包pagehelper-x.x.x.jar 和 jsqlparser-0.9.5.jar
- 在MyBatis-config全局配置文件中配置分页插件
<plugins>
<plugin interceptor="com.github.pagehelper.PageInterceptor"></plugin>
</plugins>
- 创建一个util类叫pageUtil,将我们页码的html信息进行封装,并且存放在builder中
package com.atguigu.ssm.util;
import javax.servlet.http.HttpServletRequest;
import com.atguigu.ssm.bean.Emp;
import com.github.pagehelper.PageInfo;
/**
* 首页 上一页 1 2 3 4 5 下一页 末页
*
*/
public class PageUtil {
public static String getPageInfo(PageInfo<Emp> pageInfo, HttpServletRequest request) {
String path = request.getContextPath() + "/";
StringBuilder builder = new StringBuilder();
// 拼接首页
builder.append("<a href='" + path + "emps/1'>首页</a>");
builder.append(" ");
// 拼接上一页
if (pageInfo.isHasPreviousPage()) {
builder.append("<a href='" + path + "emps/" + pageInfo.getPrePage() + "'>上一页</a>");
builder.append(" ");
} else {
builder.append("上一页");
builder.append(" ");
}
// 拼接页码
int[] nums = pageInfo.getNavigatepageNums();
for (int i : nums) {
if (i == pageInfo.getPageNum()) {
builder.append("<a style='color:red;' href='" + path + "emps/" + i + "'>" + i + "</a>");
builder.append(" ");
} else {
builder.append("<a href='" + path + "emps/" + i + "'>" + i + "</a>");
builder.append(" ");
}
}
// 拼接下一页
if (pageInfo.isHasNextPage()) {
builder.append("<a href='" + path + "emps/" + pageInfo.getNextPage() + "'>下一页</a>");
builder.append(" ");
} else {
builder.append("下一页");
builder.append(" ");
}
// 拼接尾页
builder.append("<a href='" + path + "emps/" + pageInfo.getPages() + "'>尾页</a>");
builder.append(" ");
System.out.println(builder);
return builder.toString();
}
}
我这里将builder进行了输出,输出结果是html代码如下:
<a href='/SSM/emps/1'>首页</a>
上一页
<a style='color:red;' href='/SSM/emps/1'>1</a>
<a href='/SSM/emps/2'>2</a> <a href='/SSM/emps/3'>3</a>
<a href='/SSM/emps/4'>4</a>
<a href='/SSM/emps/2'>下一页</a>
<a href='/SSM/emps/4'>尾页</a>
所得的结果是根据controller层中设置的值所得出
4) Controller层中一些分页方法的设置
- 查询之前通过PageHelper.startPage(页码,条数)设置分页信息,该方法返回Page对象
PageHelper.startPage(pageNum, 3); - 在查询完数据后,使用PageInfo对象封装查询结果,可以获取更详细的分页信息以及可以完成分页逻辑
PageInfo pageInfo = new PageInfo<>(allEmp, 5);
注意:<>中的类型要和传入的类型一致,第二个参数5代表要显示的页码数,第一个参数代表所查询到的类型的集合。 - String page = PageUtil.getPageInfo(pageInfo, request);
调用写好的Util类,得到返回值builder; - map.put(“page”, page);把得到的html代码放到作用域中
- controller层中总体代码如下:
@Controller
public class EmpController {
@Autowired
private EmpService empService;
@RequestMapping(value = "/emps/{pageNum}", method = RequestMethod.GET)
public String getAllEmp(Map<String, Object> map, @PathVariable("pageNum") Integer pageNum,
HttpServletRequest request) {
PageHelper.startPage(pageNum, 3);
List<Emp> allEmp = empService.getAllEmp();
PageInfo<Emp> pageInfo = new PageInfo<>(allEmp, 5);
String page = PageUtil.getPageInfo(pageInfo, request);
map.put("empList", allEmp);
map.put("page", page);
return "list";
}
}
- 前端通过EL标签{page}将html代码引入
至此,分页已经可以使用了;我这里的代码是省略了service和dao层的代码。