实现一个分页功能
最近进行Web网页开发,突然发现以前一直被自己忽略掉的一个网页很重要的功能就是分页,之前一直根据师兄的建议使用PageHelper这个工具,但是在进行某些数据打包操作的时候会出现自己无法解决的问题(毕竟自己比较菜,对于一些自己不熟悉比较复杂的工具使用起来还是生疏)去查看API文档也无从查起.所以再向朋友询问之后自写一个分页器,简单使用,兼容性也好.以后再进行web开发的时候发现是可以通用的,因此打算作为一种小技巧记录下来.
假设条件
假设页面展现的表格为一页15条记录;
其实就是用到了对象的思想,首先定义一个包含页面参数和数据的类,每一页表格展现需要最基本的页面参数有:
1.总记录数 totalCount
2.总页数 totalPage
3.当前页面数 curPage
4.该页面数据 perPageData
public class LogListPageVo{
public class LogListPageVo{
// 总记录数
private Integer totalCount ;
// 总页数
private Integer totalPage ;
// 当前页数
private Integer curPage = 1;
// 每页记录数
private Integer perPage = 15;
// 每页记录数据
private List perPageData;
public LogListPageVo() {
this.curPage = 1;
this.perPage = 15;
}
然后用Ajax发送异步请求上一页和下一页
我之前一开始的思路想的是点进页面之后一次查询出所有的记录,然后借助分页工具进行每页15条的记录.其实可以每一次请求只拿这一页的数据,用curpage这个变量进行控制,每次点击下一页或者上一页,都在前端对curpage进行+1或者-1的运算操作.
sql语句举例
可以使用环境提供的Provider工具进行sql语句的拼接。
// 查询总记录数
@Select("select count(*) from Em_toollog")
Integer findTotalCount();
//条件查询总记录数
@SelectProvider(type = ToollogMapperProvider.class,method = "findTotalCountByConditions")
Integer findTotalCountByConditions(FilterVo filter);
public String findAllByConditions(ToollogVo toollogVo) {
return new SQL() {{
SELECT("*");
FROM(TABLE_NAME);
if (!StringUtils.isEmpty(toollogVo.getActiontype())) {
WHERE("actiontype=1 or actiontype=0");
}
if (!StringUtils.isEmpty(toollogVo.getTooltypeid())) {
WHERE("tooltypeid = #{tooltypeid}");
}
if (!StringUtils.isEmpty(toollogVo.getUsername())) {
WHERE("username = #{username}");
}
}}.toString();
}
//查询15条
public String findPageByConditions(LogListPageVo pageVo) {
Integer size = pageVo.getPerPage();
Integer offset = (pageVo.getCurPage() - 1) * size;
return new SQL() {{
SELECT(" top " + size + " *");
FROM(TABLE_NAME);
WHERE("logid not in (select top " + offset + " logid from Em_toollog)");
}}.toString();
}
public String findPageById(LogListPageVo pageVo, Integer id) {
Integer size = pageVo.getPerPage();
Integer offset = (pageVo.getCurPage() - 1) * size;
Integer userid = id;
String sql = new SQL() {{
SELECT(" top " + size + " *");
FROM(TABLE_NAME);
WHERE("logid not in (select top " + offset + " logid from Em_toollog)");
WHERE("userid = " + userid);
}}.toString();
return sql;
}
大概就是这些,对于分页如果以后遇到更加便捷多样的方法再继续补充。第一篇记录博客,多有不足,以后改进。