Dorado 9 : 02. 分页

分页功能是很常见的功能,特别是当数据量越来越大的时候,分页查询是必不可少的。

关于查询分页Java后端的开发技术有很多成熟的解决方案,例如如果使用的ORM框架是mybatis的话,有开源的分页插件可以使用,如:Mybatis-PageHelper。

在你引入Java后端的查询分页技术后如何和Dorado的控件结合就是本文要重点说明的。

在dorado的Java端提供了一个Page对象辅助前端控件进行分页处理。

public class Page<T> {
    private int pageSize;//每页记录数
    private int pageNo;//当前要查询数据对应的页号
    private int firstEntityIndex;
    private int lastEntityIndex;

    private Collection<T> entities;//当前分页查询出来的数据
    private int entityCount;//本次查询匹配的总记录数(不考虑分页)
    private int pageCount;

Page对象的最重要的四个属性是:

pageSize,pageNo,entities,entityCount

Dorado的数据查询是通过前端的Ajax请求触发后端的DataProvider方法的,触发该方法的时候,前端会在ajax请求中注入pageSize和pageNo信息告诉DataProvider

{
    "action":"load-data",
    "dataProvider":"simpleCRUD#getAll",
    "supportsEntity":false,
    "resultDataType":"v:com.bstek.dorado.sample.data.SimpleCRUD$[ProductType]",
    "pageSize":10,
    "pageNo":2
}

而在分页查询情况下Dorado的引擎通过智能方法适配的时候,会将pageSize和pageNo信息自动封装为Page对象,并作为DataProvider方法的参数传入:

@DataProvider
public void getAll(Page<Product> page) {
    int pageNo = page.getPageNo();//获取客户端传上来的pageNo信息
    int pageSize = page.getPageSize();//获取客户端传上来的pageSize信息
}

在这个方法中,我们就可以通过page参数获取客户端传上来的pageNo和pageSize信息。进而调用自己的业务逻辑层或dao层进行数据查询。

当然查询的最后结果是要返回到前台的,处理的办法还是通过Page对象:

@DataProvider
public void getAll(Page<Product> page) {
    int pageNo = page.getPageNo();
    int pageSize = page.getPageSize();
    PageHelper.startPage(pageNo, pageSize);
    ArrayList<Product> list = productDao.getProductList();
    PageInfo<Product> pageInfo = new PageInfo<Product>(list);
    page.setEntities(list);
    page.setEntityCount(pageInfo.getTotal());
}

提示

上述代码中的productDao的实现是一个示例,采用的PageHelper的写法,实际场景要看开发的项目的分页实现框架决定的。