使用PageHelper分页插件
该文章主要内容
1 引入依赖
<!-- spring boot 整合pagehelper依赖 版本有兼容性问题 第一种方式依赖的包-->
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper-spring-boot-starter</artifactId>
<version>1.2.5</version>
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-logging</artifactId>
</exclusion>
<exclusion>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
</exclusion>
<exclusion>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
</exclusion>
</exclusions>
</dependency>
2 封装通用Bean
import com.github.pagehelper.Page;
import lombok.Data;
import java.io.Serializable;
import java.util.List;
/**
* @description 分页泛型类
* @author pengXiong
* @date 2020/9/24 12:34
*/
@Data
public class PageBean<E> implements Serializable {
private long total; //总记录数
private E data; //结果集
private int pageNum; // 第几页
private int pageSize; // 每页记录数
private int pages; // 总页数
private int size; // 当前页的数量 <= pageSize,该属性来自ArrayList的size属性
/**
* 包装Page对象,因为直接返回Page对象,在JSON处理以及其他情况下会被当成List来处理,
* 而出现一些问题。
* @param list page结果
*/
public PageBean(List<E> list) {
if (list instanceof Page) {
Page<E> page = (Page<E>) list;
this.total = page.getTotal();
this.data = (E) page;
this.pageNum = page.getPageNum();
this.pageSize = page.getPageSize();
this.pages = page.getPages();
this.size = page.size();
}
}
}
3 PageBean构造器解析(很重要)
第32行,为什么查询的list
参数可以强转为Page<E>
, 因为第31行的 list instanceof Page
,仔细看Page
的定义,发现PageHelper
使用的Bean定义Page
继承自ArrayList,所以只要查询的是List返回值,PageHelper
会自动把分页信息拦截查询之后分装到当前list中
4 调用
public BaseResult<PageBean> getDevLifecycle(@RequestBody PageBean<DeviceLifecycleVO> pageBean) {
PageHelper.startPage(pageBean.getPageNum(), pageBean.getPageSize());
List<DeviceLifecycleVO> list = deviceLifecycleDao.getDevLifecycle(pageBean.getData());
return new BaseResult<>(CodeEnum.E0, true, new PageBean<>(list));
}
注意最后的new PageBean<>(list),该方法调用我们定义的通用Bean构造方法,
报错:
mybatis-plus后出现ClassNotFoundException: org.mybatis.logging.LoggerFactory
因引入mybatis-plus,和之前的pagehelper冲突,
结论:mybatis-plus中已经存在mybatis相关,则在pagehelper中应该排除,避免冲突,另外建议分页使用mybatis-plus自带分页插件,不要使用pagehelper。
所以文章开头使用的pom引入加入了如下这段
<exclusion>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
</exclusion>
<exclusion>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
</exclusion>
参考文章:
mybatis-plus后出现ClassNotFoundException: org.mybatis.logging.LoggerFactory