简单的分页功能总结

实现一个分页功能

最近进行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;
    }

大概就是这些,对于分页如果以后遇到更加便捷多样的方法再继续补充。第一篇记录博客,多有不足,以后改进。

你可能感兴趣的:(开发经验总结)