-
PageHelper底层逻辑
在使用PageHelper进行分页时,PageHelper会对sql进行拦截,在拦截时会对SQL进行记录,如果下次进入是相同的SQL,则会直接生成新的SQL,否则就会通过一系列的判断生成一个新的SQL。
在没有设置PageHelper的属性时,PageHelper的PageAutoDialect会根据配置文件的URL自动匹配数据库
-
PageHelper依赖
使用PageHelper分页插件要添加以下依赖(感觉这个可以优化,会的帮忙评论一下,谢谢!!)
<!--MyBatis分页插件-->
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper-spring-boot-starter</artifactId>
<exclusions>
<exclusion>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
</exclusion>
<exclusion>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-autoconfigure</artifactId>
</exclusion>
<exclusion>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper-spring-boot-autoconfigure</artifactId>
</exclusion>
</exclusions>
</dependency>
<!-- PageHelper Spring Boot:MyBatis分页 -->
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper-spring-boot-starter</artifactId>
<version>1.4.0</version>
</dependency>
-
PageHelper分页方法的使用
参数一:页码 参数二:数据条数
作用域:只会对此行代码的下一行查询语句起到作用
获取到的分页数据:使用PageHelper的startPage方法后的查询语句会直接返回分页数据
PageHelper.startPage(page,pageSize);
List<xxxVo> list = XxxMapper.selectList();
-
PageInfo类解释
获取分页信息:将查询到的分页数据放入PageInfo类中可以获得相对应的分页信息
PageInfo<XxxVO> pageInfo = new PageInfo<>(list);
PageInfo的属性如下(可以获得到的分页信息)
private static final long serialVersionUID = 1L;
private int pageNum; //当前页的页码
private int pageSize; //每页的数量
private int size; //当前页的数量
private int startRow; //当前页面第一个元素在数据库中的行号
private int endRow;//当前页面最后一个元素在数据库中的行号
private long total; //总记录数
private int pages; //总页数
private List<T> list; //结果集
private int prePage; //上一页
private int nextPage; //下一页
private boolean isFirstPage; //是否为第一页
private boolean isLastPage; //是否为最后一页
private boolean hasPreviousPage; //是否有前一页
private boolean hasNextPage; //是否有下一页
private int navigatePages; //导航页码数
private int[] navigatepageNums; //所有导航页号
private int navigateFirstPage; //导航条上的第一页
private int navigateLastPage; //导航条上的最后一页
-
自定义返回值
如需要的分页信息比较少可以直接从获得的PageInfo中获取放在自定义实体类中,实体类中的属性可以从PageInfo类中复制自己需要的,可以将此类当做返回值使用
代码如下:
/**
* <p>数据分页类</p>
*
* @param <T> 列表数据
*/
@Data
public class JsonPage<T> implements Serializable {
private Integer page;
private Integer pageSize;
private Integer totalPage;
private Long total;
private List<T> list;
/**
* 将PageHelper分页后的list转为分页信息
*/
public static <T> JsonPage<T> restPage(PageInfo<T> pageInfo) {
JsonPage<T> result = new JsonPage<T>();
result.setTotalPage(pageInfo.getPages());
result.setPage(pageInfo.getPageNum());
result.setTotal(pageInfo.getTotal());
result.setList(pageInfo.getList());
return result;
}
}