实现Java手动分页PageUtil

在实际开发中,我们经常需要对数据库查询结果进行分页展示,这样可以减轻前端页面的渲染压力,并提高用户体验。而在Java中,手动实现分页功能可以更好地控制数据展示的效果。本文将介绍如何使用Java手动分页PageUtil实现分页功能,并解决一个实际问题。

问题描述

假设我们有一个包含若干用户信息的数据库表,我们需要对该表中的用户数据进行分页展示。要求每页展示10条数据,并且能够通过页码进行切换。

解决方案

我们可以通过自定义一个PageUtil工具类来实现分页功能。

Step 1: 创建PageUtil类

首先,我们需要创建一个PageUtil类,该类包含以下属性和方法:

  • pageNo: 当前页码
  • pageSize: 每页展示的数据条数
  • totalRecords: 数据库表中的总记录数
  • totalPages: 总页数
  • startIndex: 当前页数据的起始索引
  • endIndex: 当前页数据的结束索引
  • hasPreviousPage(): 判断是否有上一页
  • hasNextPage(): 判断是否有下一页
  • calculateIndexes(): 计算起始和结束索引

下面是PageUtil类的代码实现:

public class PageUtil {
    private int pageNo;
    private int pageSize;
    private int totalRecords;
    private int totalPages;
    private int startIndex;
    private int endIndex;

    public PageUtil(int pageNo, int pageSize, int totalRecords) {
        this.pageNo = pageNo;
        this.pageSize = pageSize;
        this.totalRecords = totalRecords;
        this.totalPages = (int) Math.ceil((double) totalRecords / pageSize);
        calculateIndexes();
    }

    public boolean hasPreviousPage() {
        return pageNo > 1;
    }

    public boolean hasNextPage() {
        return pageNo < totalPages;
    }

    private void calculateIndexes() {
        startIndex = (pageNo - 1) * pageSize;
        endIndex = Math.min(startIndex + pageSize - 1, totalRecords - 1);
    }

    // Getters and setters

    public int getPageNo() {
        return pageNo;
    }

    public void setPageNo(int pageNo) {
        this.pageNo = pageNo;
        calculateIndexes();
    }

    public int getPageSize() {
        return pageSize;
    }

    public void setPageSize(int pageSize) {
        this.pageSize = pageSize;
        calculateIndexes();
    }

    public int getTotalRecords() {
        return totalRecords;
    }

    public void setTotalRecords(int totalRecords) {
        this.totalRecords = totalRecords;
        this.totalPages = (int) Math.ceil((double) totalRecords / pageSize);
        calculateIndexes();
    }

    public int getTotalPages() {
        return totalPages;
    }

    public int getStartIndex() {
        return startIndex;
    }

    public int getEndIndex() {
        return endIndex;
    }
}

Step 2: 使用PageUtil进行分页查询

现在,我们可以在数据库查询中使用PageUtil类来进行分页查询操作了。以下是一个示例的数据库查询代码:

public List<User> getUsersByPage(int pageNo) {
    int pageSize = 10; // 每页展示10条数据
    int totalRecords = getTotalRecords(); // 获取数据库表中的总记录数

    PageUtil pageUtil = new PageUtil(pageNo, pageSize, totalRecords);

    // 查询当前页的用户数据
    String sql = "SELECT * FROM user LIMIT ?, ?";
    PreparedStatement statement = connection.prepareStatement(sql);
    statement.setInt(1, pageUtil.getStartIndex());
    statement.setInt(2, pageUtil.getPageSize());

    ResultSet resultSet = statement.executeQuery();
    List<User> users = new ArrayList<>();
    while (resultSet.next()) {
        User user = new User();
        user.setId(resultSet.getInt("id"));
        user.setName(resultSet.getString("name"));
        // 其他属性赋值...
        users.add(user);
    }

    return users;
}

在上面的示例中,我们首先获取数据库表中的总记录数,然后创建一个PageUtil对象,并根据需要的页码和每页展示的数据条数进行初始化。接下来,我们可以使用PageUtil的getStartIndex()getPageSize()方法来设置查询语句中的LIMIT子句,从而实现分页查询。

Step 3: 在页面中展示分页信息

最后,我们可以在页面中展示分页信息和用户数据了。以下是一个示例的页面展示代码:

public void showUsersByPage(int pageNo) {
    List<User> users = getUsersByPage