PageHelper 插件踩过的坑

PageHelper 插件踩过的坑

  1. PageHelper.startPage(pageNum, pageSize);要紧跟 select

  2. 在将集合数据传入pageInfo的时候, 要用有参数的的构造, 不能使用set
    PageInfo pageInfo = new PageInfo<>(pictureInfos);

  3. 尽量不要用pageHelper 中的排序, 排序的时候, 尽量用example 中的排序, 因为 先筛选后排序, 再分页查询, 更符合逻辑

  4. 在一个页面中, 两个分页的地方, 不要调用同一个分页service方法, 因为, pageHelper, 会有total 的坑, 不知道的, 可以搜索 pageHelper total 的问题, 解决办法就是, 再重新写一个分页的service

  5. sql 中不要用重复的字段,有重复的就取别名。Mysql报错Duplicate column name xxx


一: 下面是正确的代码, 注意顺序, 和PageInfo 的有参数构造, 尽量这样写
PageHelper.startPage(pageNum, pageSize);
List<PictureInfo> pictureInfos = pictureInfoMapper.selectByExample(example);
PageInfo<PictureInfo> pageInfo = new PageInfo<>(pictureInfos);
二: 当PageHelper和foreach循环时候, 遇到个小坑, 自己在返回的集合中, 自己想对每个VideoInfo的VideoUrl,做一下处理.下面是正确的做法
 PageHelper.startPage(pageNum, pageSize);
 List<VideoInfo> videoInfos = videoInfoMapper.selectByExample(example);
 for (VideoInfo video : videoInfos){
      if (!video.getVideoUrl().startsWith("http")){
          video.setVideoUrl(videoPlayPrefix+video.getVideoUrl());
      }
  }
  PageInfo<VideoInfo> pageInfo = new PageInfo<>(videoInfos);
自己原先的做法是,下面的
 PageHelper.startPage(pageNum, pageSize);
 List<VideoInfo> videoInfos = videoInfoMapper.selectByExample(example);
 List<VideoInfo> list = new ArrayList<>();
 for (VideoInfo video : videoInfos){
      if (!video.getVideoUrl().startsWith("http")){
          video.setVideoUrl(videoPlayPrefix+video.getVideoUrl());
      }
      list.add(video);
  }
  PageInfo<VideoInfo> pageInfo = new PageInfo<>(list);
  结果是错的, 返回的总记录条数, 总是只返回页大小个数.
  
  总结:
  foreach 循环, 产生的是对象的引用, 是对原先的地址的引用, 是指针!
三: PageHelper.startPage(pageNum, pageSize); 这个放的位置决定了开始使用分页的位置, 尤其是有两个查询时, 要看清startPage放的位置
四:[转载]Duplicate column name 'xxx’错误
使用Paginator插件进行分页时,如果查询的字段中有重复,就会报错 Duplicate column name xxx。
如果单独执行查询语句,mysql是支持重复字段查询的,但是使用了Paginator插件后,会在查询SQL外面包一层进行统计,就变成了
select count(1) from (select fid,id,fid from user_info) post;
  • 3
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值