PageHelper使用及常见失效问题

本文介绍了Mybatis分页查询中常见的失效问题及其解决方法。包括:确保分页查询紧跟在PageHelper方法后、手动设置PageInfo的总记录数和总页数、安全调用PageHelper以及配置参数取消分页。同时,提到了QueryInterceptor的使用规范,帮助开发者更好地进行分页操作。
摘要由CSDN通过智能技术生成

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:配置 pageSizeZerotrue
step2:设置 pageSize = 0 或者 RowBounds.limit = 0

4.QueryInterceptor使用(QueryInterceptor 规范)

待补充~

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值