使用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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值