PageHelper获取数据总条数的问题 - Sanarous的博客

PageHelper获取数据总条数的问题

PageHelper 这个插件用了很多次了,但是今天使用的时候才发现中间有一个小坑,就是使用这个插件中间只能有一次查询的操作语句,不能再添加其它语句!

比如说,我们一般都是这样进行查询:

1
2
3
4
5
6
7
8
//开启分页,page代表当前页数,limit代表每页总数
PageHelper.startPage(page, limit);

//查询数据库的语句,pageHelper在这里做一次拦截器操作
List<UserInfo> userInfos = userInfoService.queryAllUserInfo();

//使用PageInfo包装结果
PageInfo<UserInfo> pageInfo = new PageInfo<>(userInfos);

上述操作是这样的,但是如果我们需要将查询的 List<UserInfo>转换成前端展示的 ViewObject 对象,那么我们想当然会在中间做一次操作:

1
2
3
4
5
6
7
8
9
10
11
PageHelper.startPage(page, limit);

List<UserInfo> userInfos = userInfoService.queryAllUserInfo();
//将userInfos某些字段隐藏,转换成前端需要的bean对象
List<UserInfoVO> res = new ArrayList<>();
for (UserInfo info : pageInfo.getList()) {
res.add(convertUserInfoToVO(info));
}

//然后再包装一下前端对象
PageInfo<UserInfoVO> pageInfo = new PageInfo<>(res);

这样获取的 pageInfo.getTotal()一直是当前的 limit 总数,而不是查询的总条数。所以,我们最好不要在 pageHelper 两个语句中间插入其它语句,而是在后面做一些操作:

1
2
3
4
5
6
7
8
9
10
11
12
13
//分页查询
PageHelper.startPage(page, limit);
List<UserInfo> userInfos = userInfoService.queryAllUserInfo();
PageInfo<UserInfo> pageInfo = new PageInfo<>(userInfos);

//转换成前端VO
List<UserInfoVO> res = new ArrayList<>();
for (UserInfo info : pageInfo.getList()) {
res.add(convertUserInfoToVO(info));
}

//那么这样就可以正确返回了!
return new LayuiTableResult(0, "查询成功", pageInfo.getTotal(), res);
如果这篇文章对您很有帮助,不妨
-------------    本文结束  感谢您的阅读    -------------
0%