前言:在以前用servlet+JSP做小型管理系统时,数据表格分页的代码编写往往都要花费一些时间,这次学习了Spring+springMVC+Mybatis,熟悉了一下前端框架easyUI的用法之后,数据分页的代码编写已经变得十分简洁高效了。
1.datagird插件的介绍
datagrid是easyUI中使用比重最大的插件,它与远程数据交互详情是这样的:
在第一次加载或页码/单页容量发生变化的时候,会向它的url属性提交一次post请求,并包含了两个参数:page(当前页码),rows(单页容量)。并会解析响应体(responseBody)中json数据:total:数据总条数,rows,具体数据(list类型)。
2.基本思路
有了框架知识的基础及对该插件的基本了解,思路就变的非常清晰了:在控制层我们接受datagrid请求的参数,交给持久层通过limit子句和count(*)查询数据库获取rows和total返回到页面,如果是servlet开发的话写几条代码就行了,现在我们使用web框架的话就在其基础上写出优雅的代码。
3.代码详情
首先创建接收datagrid的一个Vo(ViewObject)类:
public class BaseVo {
private int page;
private int rows;
public int getIndex() {
return (page - 1) * rows;
}
public int getPage() {
return page;
}
public void setPage(int page) {
this.page = page;
}
public int getRows() {
return rows;
}
public void setRows(int rows) {
this.rows = rows;
}
}
getIndex为处理所需数据的起始索引,你可以用更具体的PO类去继承它实现分页,之后我们为分页:
public class CustomResult<T> {
private int total;
private List<T> rows;
public int getTotal() {
return total;
}
public void setTotal(int total) {
this.total = total;
}
public List<T> getRows() {
return rows;
}
public void setRows(List<T> dataList) {
this.rows = dataList;
}
}
使用泛型可以在创建Result对象指定类型,这样的对所有被分页的PO都适用。
4.其他代码
控制层代码:@Controller
public class ProjectController {
@Autowired
private ProjectService projectService;
@RequestMapping("/findProject")
@ResponseBody
public CustomResult<Project> findProject(ProjectVo projectVo) {
return projectService.findProject(projectVo);
}
}
业务层代码:
public class ProjectServiceImpl implements ProjectService {
@Autowired
private ProjectMapper projectMapper;
@Override
public CustomResult<Project> findProject(ProjectVo projectVo) {
CustomResult<Project> customResult = new CustomResult<>();
customResult.setRows(projectMapper.findProject(projectVo));
customResult.setTotal(projectMapper.getSum());
return customResult;
}
}