分页查询(pagehelper)

分页查询的接口

url: /admin/employee/page (GET)

请求参数:

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

返回数据

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

返回数据处理

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

分页查询(pagehelper)_第1张图片

代码

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… 字段;实现分页。

你可能感兴趣的:(Project,mybatis,spring,boot)