分页查询(pagehelper)

分页查询的接口

url: /admin/employee/page (GET)

请求参数:

name 员工姓名
page 页码
size 每页记录数

返回数据

code 状态码
msg 信息
data 查询的数据 (包括 total 总记录数; record 当前页 数据集合;)

返回数据处理

后端将整个返回数据封装成一个 result对象 Result< PageResult >

在这里插入图片描述

代码

Service层

    /**
     * 员工分页查询
     * @param employeePageQueryDTO
     * @return
     */
    public PageResult pageQuery(EmployeePageQueryDTO employeePageQueryDTO) {
// mybatis 的分页插件 PageHelper开发;
        // select * from employee limit 0,10
        //开始分页查询 (//页码  //每页显示记录数 )
        PageHelper.startPage(employeePageQueryDTO.getPage(),employeePageQueryDTO.getPageSize());
        Page<Employee> page = employeeMapper.pageQuery(employeePageQueryDTO);
        long total = page.getTotal();
        List<Employee> records = page.getResult();
        return new PageResult(total,records);
    }

PageHelper如何实现的

传入的DTO

@Data
public class EmployeePageQueryDTO implements Serializable {

    //员工姓名
    private String name;

    //页码
    private int page;

    //每页显示记录数
    private int pageSize;

}

我们在使用PageHelper时, 因为我们的DTO中,已经有了页码,和每页显示的数量。
可以直接调用pagehelper的startpage方法开始分页;

    public static <E> Page<E> startPage(int pageNum, int pageSize, boolean count, Boolean reasonable, Boolean pageSizeZero) {
        Page<E> page = new Page(pageNum, pageSize, count);
        page.setReasonable(reasonable);
        page.setPageSizeZero(pageSizeZero);
        Page<E> oldPage = getLocalPage();
        if (oldPage != null && oldPage.isOrderByOnly()) {
            page.setOrderBy(oldPage.getOrderBy());
        }

        setLocalPage(page);
        return page;
    }

通过对 startpage()方法源码追踪,最终调用的是LocalThread对象的一个setLocalPage(page)方法;

public abstract class PageMethod {
    protected static final ThreadLocal<Page> LOCAL_PAGE = new ThreadLocal();
    protected static boolean DEFAULT_COUNT = true;

    public PageMethod() {
    }

    protected static void setLocalPage(Page page) {
        LOCAL_PAGE.set(page);
    }
}

这个方法就会把这个page设置到我们这一次请求的这个线程存储的空间里面,pagehelper就可以通过mybatis拦截器的方式,追加 sql 的查询语句 的 limit… 字段;实现分页。

  • 9
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值