1.常见失效问题
1.分页查询失效
tips:只有紧跟在方法后的第一个 Mybatis 的查询(Select)方法会被分页
检查startPage(int pageNum, int pageSize)或offsetPage(int offset, int limit)方法后是否为需分页的查询结果
2.使用PageInfo包装的总记录数total数量错误
错误示例:
//PageInfo返回的total为第一个 Mybatis 的查询结果的总记录数
Page page = PageHelper.startPage(listReq.getPageNum(), listReq.getPageSize());
List<User> list = userMapper.selectList(new QueryWrapper<User>());
List<UserResp> respList = JsonCopyUtil.copy(list,UserResp.class);
return new PageInfo(respList);
正确示例:
//手动设置总记录数total和总页数pages
Page page = PageHelper.startPage(listReq.getPageNum(), listReq.getPageSize());
List<User> list = userMapper.selectList(new QueryWrapper<User>());
List<UserResp> respList = JsonCopyUtil.copy(list,UserResp.class);
PageInfo pageInfo = new PageInfo(respList);
//总页数
pageInfo.setPages(page.getPages());
//总条数
pageInfo.setTotal(page.getTotal());
return pageInfo;
//复杂查询不建议使用lambda
return PageHelper.startPage(listReq.getPageNum(), listReq.getPageSize()).doSelectPageInfo(() ->
JsonCopyUtil.copy(
eventInfoMapper.selectList(new QueryWrapper<User>()),UserResp.class)
);
3.PageHelper安全调用
参考官方文档检索PageHelper 安全调用,查看源码抽象类PageMethod
protected static final ThreadLocal<Page> LOCAL_PAGE = new ThreadLocal<Page>();
2.使用分页方式(PageHelper官方文档)
方法1:startPage(int pageNum, int pageSize)或offsetPage(int offset, int limit)
tips:只有紧跟在方法后的第一个 Mybatis 的查询(Select)方法会被分页
PageHelper.startPage(page.getPageNum(), page.getPageSize());
List<User> respList = userMapper.selectList(new QueryWrapper<User>());
return new PageInfo(respList);
PageHelper.offsetPage(page.getPageNum(), page.getPageSize());
List<User> respList = userMapper.selectList(new QueryWrapper<User>());
return new PageInfo(respList);
方法2:lambda用法
return PageHelper.startPage(page.getPageNum(), page.getPageSize()).doSelectPageInfo(() -> userMapper.selectList(new QueryWrapper<User>())
);
3.配置参数取消分页
step1:配置 pageSizeZero 为 true
step2:设置 pageSize = 0 或者 RowBounds.limit = 0
4.QueryInterceptor使用(QueryInterceptor 规范)
待补充~