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;
PageHelper插件是一个用于实现分页功能的开源插件,它是基于MyBatis框架开发的。通过使用PageHelper插件,我们可以方便地在数据库查询中实现分页功能。 使用PageHelper插件,可以简化我们在代码中手动编写分页逻辑的过程。我们只需要在查询方法中添加相应的分页参数即可,PageHelper会自动对查询结果进行分页处理。 以下是使用PageHelper插件的一些常见操作示例: 1. 在pom.xml文件中添加PageHelper依赖: ```xml <dependency> <groupId>com.github.pagehelper</groupId> <artifactId>pagehelper</artifactId> <version>最新版本号</version> </dependency> ``` 2. 在MyBatis的配置文件(如mybatis-config.xml)中配置PageHelper插件: ```xml <plugins> <plugin interceptor="com.github.pagehelper.PageInterceptor"> <property name="dialect" value="数据库方言"/> </plugin> </plugins> ``` 其中,`dialect`属性需要根据实际使用的数据库类型进行配置,如"mysql"、"oracle"等。 3. 在需要进行分页查询的方法中,添加分页参数: ```java import com.github.pagehelper.PageHelper; import com.github.pagehelper.PageInfo; ... public List<User> getUsers(int pageNum, int pageSize) { // 设置分页参数 PageHelper.startPage(pageNum, pageSize); // 执行查询操作 List<User> userList = userDao.getUsers(); // 获取分页信息 PageInfo<User> pageInfo = new PageInfo<>(userList); // 返回分页结果 return pageInfo.getList(); } ``` 在上述示例中,`pageNum`表示当前页码,`pageSize`表示每页显示的记录数。`PageHelper.startPage(pageNum, pageSize)`会对接下来的查询进行分页处理,`PageInfo<User>`则用于获取查询结果的分页信息。 通过以上步骤,我们就可以在代码中使用PageHelper插件来实现数据库查询的分页功能。这样可以大大简化我们的开发工作,提高开发效率。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值