分页
分页功能是很常见的功能,特别是当数据量越来越大的时候,分页查询是必不可少的。 关于查询分页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的写法,实际场景要看开发的项目的分页实现框架决定的。
更多建议: