分页插件-PageHelper
原始分页实现
显示所有的页码数
1、总的数据条数 total
2、每页要显示的数据数量是多少 count
3、总页码数 total%count==0?total/count:(total/count+1)
每页要显示的数据来源
1、起始位置
2、固定的排序方式(查询的条件一致)
起始下标和页码数之间的关系
public class PageInfo {
/**
* 总数据条数
*/
private int totals;
/**
* 每页要显示的数据条数
*/
private int pageCount;
/**
* 总页数
*/
private int pageTotals;
/**
* 起始下标
*/
private int startIndex;
/**
* 当前的页码数
*/
private int pageIndex;
public int getTotals() {
return totals;
}
public void setTotals(int totals) {
this.totals = totals;
if(totals%pageCount==0) {
setPageTotals(totals/pageCount);
}else {
setPageTotals(totals/pageCount+1);
}
}
public int getPageCount() {
return pageCount;
}
public void setPageCount(int pageCount) {
this.pageCount = pageCount;
}
public int getPageTotals() {
return pageTotals;
}
public void setPageTotals(int pageTotals) {
this.pageTotals = pageTotals;
}
public int getStartIndex() {
return startIndex;
}
public void setStartIndex(int startIndex) {
this.startIndex = startIndex;
}
public int getPageIndex() {
return pageIndex;
}
//通过前台传递过来的页码数设置对应的起始下标
public void setPageIndex(int pageIndex) {
this.pageIndex = pageIndex;
setStartIndex((pageIndex-1)*pageCount);
}
@Override
public String toString() {
return "PageInfo [totals=" + totals + ", pageCount=" + pageCount + ", pageTotals=" + pageTotals
+ ", startIndex=" + startIndex + ", pageIndex=" + pageIndex + "]";
}
}
<!-- 分页查询 -->
<select id="queryUsersLimit" parameterType="pageInfo" resultType="user">
select <include refid="baseUser"/> from t_user users
limit #{startIndex},#{pageCount}
</select>
@Test
public void testQueryUsersLimit() {
IUserDao userDao = sqlSession.getMapper(IUserDao.class);
//当前页的页码数
int pageIndex = 3;
//每页要显示的条数
int pageCount = 5;
PageInfo info = new PageInfo();
info.setPageCount(pageCount);
info.setStartIndex((pageIndex-1)*pageCount);
List<User> userList = userDao.queryUsersLimit(info);
System.out.println(userList);
}
/**
* 分页查询
* @param req
* @param userDao
* @param out
*/
public void queryUsersLimit(HttpServletRequest req,IUserDao userDao,PrintWriter out) {
String infoJson = req.getParameter("info");
PageInfo info = JSON.parseObject(infoJson, PageInfo.class);
List<User> userList = userDao.queryUsersLimit(info);
String jsonData = JSON.toJSONString(userList);
out.write(jsonData);
}
PageHelper的分页
导入相关的jar
pageHelper.jar jsqlparser.jar
配置拦截器(拦截通过Mybatis发送的请求)
<plugins>
<!-- com.github.pagehelper为PageHelper类所在包名 -->
<plugin interceptor="com.github.pagehelper.PageInterceptor"></plugin>
</plugins>
代码中的使用
@Test
public void testQueryUsers() {
IUserDao userDao = sqlSession.getMapper(IUserDao.class);
PageHelper.startPage(1, 5);
List<User> userList = userDao.queryUsers();
System.out.println(userList);
}
注意:分页插件只能对紧邻的第一个查询语句生效
使用postman测试