怎么做分页

2018-07-04  本文已影响0人  狗没拿伞
我已知的第一种:数据库为mysql

 利用SELECT * FROM tablename LIMIT current,pagesize来做分页,前端需要传递两个参数,一个是每页多少条数据即pagesize,第二是用户点击了第几页即cureent=(第几页-1)乘pagesize

 利用SELECT COUNT(0) FROM tablename [where......];获得总条数来计算出可以分多少页。

 后台就很好弄了,先弄一个公共类,大概有代码如下:

public class PageQueryBean {
    private static final int DEFAULT_PAGE_SIZE = 10;
    /** 当前页 */
    private Integer currentPage;
    /** 每页显示数据条数 */
    private Integer pageSize;
    /** 所有记录数 */
    private int totalRows;
    /** sql查询起始行 */
    private Integer startRow;
    /** 总页数 */
    private Integer totalPage;
    /** 查询所得数据集 */
    private List<?> items;
    public final Integer getStartRow() {
        if (startRow == null)
            startRow = (currentPage == null ? 0 : (currentPage - 1) * getPageSize()) ;
        return startRow;
    }
    public void setStartRow(Integer startRow) {
        this.startRow = startRow;
    }
    public final Integer getPageSize() {
        return pageSize == null ? DEFAULT_PAGE_SIZE : pageSize;
    }
    public final void setPageSize(Integer pageSize) {
        this.pageSize = pageSize;
    }
    public final int getTotalRows() {
        return totalRows;
    }
    public final void setTotalRows(int totalRows) {
        this.totalRows = totalRows;
        int totalPage = totalRows % getPageSize() == 0 ? totalRows / getPageSize() : totalRows / getPageSize() + 1;
        setTotalPage(totalPage);
    }
    public final List<?> getItems() {
        return items == null ? Collections.EMPTY_LIST : items;
    }
    public final void setItems(List<?> items) {
        this.items = items;
    }
    public final Integer getCurrentPage() {
        return currentPage;
    }
    public final void setCurrentPage(Integer currentPage) {
        this.currentPage = currentPage;
    }
    public final Integer getTotalPage() {
        return totalPage == null || totalPage == 0 ? 1 : totalPage;
    }
    public final void setTotalPage(Integer totalPage) {
        this.totalPage = totalPage;
    }
    @Override
    public String toString() {
        return "PageQueryBean [currentPage=" + currentPage + ", pageSize="
                + pageSize + ", totalRows=" + totalRows + ", startRow="
                + startRow + ", totalPage=" + totalPage + ", items=" + items
                + "]";
    }

 然后再写相关的VO类,继承于上述的公共类,再写相关的service,controller等,具体就不说了,也比较容易。

我已知的第二种 持久层利用JPA

 使用Pageable来做分页,前端传过来page和size作为PageRequest实例的参数,代码

PageRequest request = new PageRequest(page-1,size);

 再使用

 Page<ProductInfo> productInfoPage = productService.findAll(request);
//其中productService中直接return repository.findAll(pageable);

 其中总页数为productInfoPage.getTotalPages(),productInfoPage.content即是productInfo的集合。最后把productInfoPage返回到前端,前端拿到后分页就行了。


内容如上。\( ̄︶ ̄)/

参考资料:无所不知的度娘+各位大佬的博客

上一篇下一篇

猜你喜欢

热点阅读