PageHelper(MyBatis分页)

Love The Way You Lie 2024-03-26 15:47 166阅读 0赞
  • PageHelper底层逻辑

在使用PageHelper进行分页时,PageHelper会对sql进行拦截,在拦截时会对SQL进行记录,如果下次进入是相同的SQL,则会直接生成新的SQL,否则就会通过一系列的判断生成一个新的SQL。

在没有设置PageHelper的属性时,PageHelper的PageAutoDialect会根据配置文件的URL自动匹配数据库

  • PageHelper依赖

使用PageHelper分页插件要添加以下依赖

  1. <!--引入PageHelper分页插件 → PageHelper-->
  2. <dependency>
  3. <groupId>com.github.pagehelper</groupId>
  4. <artifactId>pagehelper</artifactId>
  5. <version>5.0.0</version>
  6. </dependency>
  • PageHelper分页方法的使用

参数一:页码 参数二:数据条数
作用域:只会对此行代码的下一行查询语句起到作用
获取到的分页数据:使用PageHelper的startPage方法后的查询语句会直接返回分页数据

  1. PageHelper.startPage(page,pageSize);
  2. List<xxxVo> list = XxxMapper.selectList();
  • PageInfo类解释

获取分页信息:将查询到的分页数据放入PageInfo类中可以获得相对应的分页信息

  1. PageInfo<XxxVO> pageInfo = new PageInfo<>(list);

PageInfo的属性如下(可以获得到的分页信息)

  1. private static final long serialVersionUID = 1L;
  2. private int pageNum; //当前页的页码
  3. private int pageSize; //每页的数量
  4. private int size; //当前页的数量
  5. private int startRow; //当前页面第一个元素在数据库中的行号
  6. private int endRow;//当前页面最后一个元素在数据库中的行号
  7. private long total; //总记录数
  8. private int pages; //总页数
  9. private List<T> list; //结果集
  10. private int prePage; //上一页
  11. private int nextPage; //下一页
  12. private boolean isFirstPage; //是否为第一页
  13. private boolean isLastPage; //是否为最后一页
  14. private boolean hasPreviousPage; //是否有前一页
  15. private boolean hasNextPage; //是否有下一页
  16. private int navigatePages; //导航页码数
  17. private int[] navigatepageNums; //所有导航页号
  18. private int navigateFirstPage; //导航条上的第一页
  19. private int navigateLastPage; //导航条上的最后一页
  • 自定义返回值

如需要的分页信息比较少可以直接从获得的PageInfo中获取放在自定义实体类中,实体类中的属性可以从PageInfo类中复制自己需要的,可以将此类当做返回值使用

代码如下:

  1. /**
  2. * <p>数据分页类</p>
  3. *
  4. * @param <T> 列表数据
  5. */
  6. @Data
  7. public class JsonPage<T> implements Serializable {
  8. private Integer page;
  9. private Integer pageSize;
  10. private Integer totalPage;
  11. private Long total;
  12. private List<T> list;
  13. /**
  14. * 将PageHelper分页后的list转为分页信息
  15. */
  16. public static <T> JsonPage<T> restPage(PageInfo<T> pageInfo) {
  17. JsonPage<T> result = new JsonPage<T>();
  18. result.setTotalPage(pageInfo.getPages());
  19. result.setPage(pageInfo.getPageNum());
  20. result.setTotal(pageInfo.getTotal());
  21. result.setList(pageInfo.getList());
  22. return result;
  23. }
  24. }

发表评论

表情:
评论列表 (有 0 条评论,166人围观)

还没有评论,来说两句吧...

相关阅读

    相关

    [几种分页方法效率比较][Link 1] ASP.net 的DataGrid 控件的内置分页功能一直不被看好,原因是它先把所有数据从数据库读出来再进行分页。在数据量很大的