实现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