1. 简介
在数据库一对多的情况下,使用Page分页查询这种Vo的时候如果直接查询会导致每页展示的条数不一致。
简单的代码如下
- 用户类
public class User{
private Integer id;
}
- 地址类
public class UserAddress {
private Integer id;
private String address;
private Integer userId;
}
- 查询
select tb.*,ua.*
from user tb
left join user_address ua on ua.user_id = tb.id
直接使用分页查询回到这分页的size失败。
2. 解决方案
使用查询条件先查出来所有符合条件的数据,数据量大的情况不建议使用
public Page<UserVo> getUserAddressPage(UserQueryDto dto) {
List<UserVo> list = userDao.getUserAddressPage(dto);
Page page = dto.getPage();
page.setTotal(list.size());
list = list.stream()
.skip((page.getCurrent() - 1) * page.getSize())
.limit(page.getSize());
page.setRecords(list);
return page;
}