PageHelper 插件踩过的坑

PageHelper 插件踩过的坑

一: 下面是正确的代码, 注意顺序, 和PageInfo 的有参数构造, 尽量这样写

PageHelper.startPage(pageNum, pageSize);
List pictureInfos = pictureInfoMapper.selectByExample(example);
PageInfo pageInfo = new PageInfo<>(pictureInfos);
  1. PageHelper.startPage(pageNum, pageSize);要紧跟 select
  1. 在将集合数据传入pageInfo的时候, 要用有参数的的构造, 不能使用set
    PageInfo pageInfo = new PageInfo<>(pictureInfos);
  1. 尽量不要用pageHelper 中的排序, 排序的时候, 尽量用example 中的排序, 因为 先筛选排序, 排序后, 在分页查询, 更符合逻辑
  1. 在一个页面中, 两个分页的地方, 不要调用同一个分页service方法, 因为, pageHelper, 会有total 的坑, 不知道的, 可以搜索 pageHelper total 的问题, 解决办法就是, 再重新写一个分页的service

二: 当PageHelper和foreach循环时候, 遇到个小坑, 自己在返回的集合中, 自己想对每个VideoInfo的VideoUrl,做一下处理.下面是正确的做法

 PageHelper.startPage(pageNum, pageSize);
 List videoInfos = videoInfoMapper.selectByExample(example);
 for (VideoInfo video : videoInfos){
      if (!video.getVideoUrl().startsWith("http")){
          video.setVideoUrl(videoPlayPrefix+video.getVideoUrl());
      }
  }
  PageInfo pageInfo = new PageInfo<>(videoInfos);

自己原先的做法是,下面的
PageHelper.startPage(pageNum, pageSize);
List videoInfos = videoInfoMapper.selectByExample(example);
List list = new ArrayList<>();
for (VideoInfo video : videoInfos){
if (!video.getVideoUrl().startsWith(“http”)){
video.setVideoUrl(videoPlayPrefix+video.getVideoUrl());
}
list.add(video);
}
PageInfo pageInfo = new PageInfo<>(list);
结果是错的, 返回的总记录条数, 总是只返回页大小个数.

总结:
foreach 循环, 产生的是对象的引用, 是对原先的地址的引用, 是指针!

三: PageHelper.startPage(pageNum, pageSize); 这个放的位置决定了开始使用分页的位置, 尤其是有两个查询时, 要看清startPage放的位置

你可能感兴趣的:(java技术点)