一个简单实用的Java分页实现(基于controller层)

  • Post author:
  • Post category:java


直接上代码:


import java.io.Serializable;

/**
 * 分页
 */
public class Page implements Serializable{

    // 每页显示条数
    private int pageSize = 10;

    // 总页数
    private Long totalPage;

    // 当前页码
    private int pageNo;

    // 当前页数据
    private Object data;

    /**
     * 开始的数据条数
     */
    public int start() {
        return (pageNo - 1) * pageSize;
    }

    /**
     * 获取每页显示条数
     * 如果命名为getPageSize,序列化时将会显示
     */
    public int size() {
	    // 基于MySQL的实现,如果是Oracle,修改为pageNo * pageSize
        return pageSize;
    }

    /**
     * 加载总页数
     */
    private void initTotalPage(long totalCount) {
        totalPage = totalCount / pageSize;
        if (totalCount % pageSize != 0)
            totalPage++;
    }

    /**
     * 获取分页对象
     *
     * @param callback 查询后的数据总条数和当前页数据
     * @param pageNo   当前页码
     */
    public static Page getInstance(Page.PageCallback callback, int pageNo) {
        return getInstance(callback, pageNo, null);
    }

    /**
     * 获取分页对象
     *
     * @param callback 查询后的数据总条数和当前页数据
     * @param pageNo   当前页码
     * @param pageSize 每页显示条数
     */
    public static Page getInstance(Page.PageCallback callback, int pageNo, Integer pageSize) {
        Page page = new Page();
        page.pageNo = pageNo;
        if (pageSize != null && pageSize > 0) {
            page.pageSize = pageSize;
        }
        page.initTotalPage(callback.queryTotalCount());
        page.data = callback.queryData(page.start(), page.size());
        return page;
    }

    // 用于序列化
    public Long getTotalPage() {
        return totalPage;
    }
    public Object getData() {
        return data;
    }
    public int getPageNo() {
        return pageNo;
    }

    public interface PageCallback {

        /**
         * 获取数据条数
         */
        long queryTotalCount();

        /**
         * 获取查询结果
         */
        Object queryData(int start, int size);

    }
}

使用示例:

// controller
    public Object findByName(String name, Integer pageNo) throws Exception {
        if (StringUtils.isBlank(name)) {
            return "empty";
        }
        Page page = Page.getInstance(new Page.PageCallback() {
            @Override
            public long queryTotalCount() {
                return service.findCountByName(name);
            }
            @Override
            public Object queryData(int start, int size) {
                return service.findByName(name, start, size);
            }
        }, pageNo, 5);
        return page;

    }



版权声明:本文为zhaoyf7746原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。