下面是详细讲解“Java Web 简单的分页显示实例代码”的完整攻略,包括两条示例说明:
1. 分页显示实现原理
在实现分页显示之前,我们需要先了解分页的原理。当我们在页面中点击“下一页”或者“上一页”等翻页按钮时,客户端会向服务器发送请求,请求需要显示的数据的页数及每页显示的数据数量。服务器收到请求后,根据请求参数查询指定页数的数据,返回给客户端,客户端再将数据渲染显示到页面上。
2. 实现分页显示的步骤
实现分页显示需要以下几个步骤:
2.1. 查询总记录数
为了计算总页数和确定每个页的起始位置,我们需要先查询总记录数。
示例代码:
// 执行总记录数查询语句
String countSql = "SELECT COUNT(*) FROM my_table";
PreparedStatement ps = connection.prepareStatement(countSql);
ResultSet rs = ps.executeQuery();
// 获取总记录数
rs.next();
int totalCount = rs.getInt(1);
2.2. 计算总页数和当前页的起始位置
有了总记录数,我们可以根据每页显示的数据量和总记录数来计算总页数和当前页的起始位置。例如,每页显示10条记录,总记录数为100条,则总页数为10页,当前页的起始位置为0。
示例代码:
// 定义每页显示的记录数
int pageSize = 10;
// 计算总页数
int totalPages = totalCount / pageSize;
if (totalCount % pageSize != 0) {
totalPages++;
}
// 计算当前页的起始位置
int offset = (pageNum - 1) * pageSize;
其中,pageNum
表示当前页的页数。
2.3. 查询当前页的数据
有了当前页的起始位置和每页显示的数据量,我们可以查询当前页的数据,并将其返回给客户端。
示例代码:
// 执行当前页的数据查询语句
String selectSql = "SELECT * FROM my_table LIMIT ? OFFSET ?";
PreparedStatement ps = connection.prepareStatement(selectSql);
ps.setInt(1, pageSize);
ps.setInt(2, offset);
ResultSet rs = ps.executeQuery();
// 处理查询结果
while (rs.next()) {
// 处理每条记录
}
3. 分页显示实例代码
以下是一个简单的分页显示实例代码:
public List<MyObject> getPage(int pageNum, int pageSize) throws SQLException {
// 查询总记录数
String countSql = "SELECT COUNT(*) FROM my_table";
PreparedStatement ps = connection.prepareStatement(countSql);
ResultSet rs = ps.executeQuery();
rs.next();
int totalCount = rs.getInt(1);
// 计算总页数和当前页的起始位置
int totalPages = totalCount / pageSize;
if (totalCount % pageSize != 0) {
totalPages++;
}
int offset = (pageNum - 1) * pageSize;
// 查询当前页的数据
String selectSql = "SELECT * FROM my_table LIMIT ? OFFSET ?";
PreparedStatement ps2 = connection.prepareStatement(selectSql);
ps2.setInt(1, pageSize);
ps2.setInt(2, offset);
ResultSet rs2 = ps2.executeQuery();
// 处理查询结果
List<MyObject> resultList = new ArrayList<>();
while (rs2.next()) {
MyObject obj = new MyObject();
obj.setId(rs2.getInt("id"));
obj.setName(rs2.getString("name"));
// 其他属性赋值
resultList.add(obj);
}
return resultList;
}
使用该方法可以获取指定页数和每页显示数量的数据,例如:
List<MyObject> resultList = getPage(2, 10); // 获取第2页的数据,每页显示10条记录
4. 示例说明
4.1. 示例1:使用Spring MVC实现分页显示
在Spring MVC中,我们可以通过对Controller进行封装,在页面上通过参数传递的方式来实现分页显示。
示例代码:
@RequestMapping("/myPage")
public ModelAndView myPage(@RequestParam(defaultValue = "1") int pageNum,
@RequestParam(defaultValue = "10") int pageSize) throws SQLException {
List<MyObject> resultList = getPage(pageNum, pageSize);
ModelAndView mav = new ModelAndView("my_page");
mav.addObject("resultList", resultList);
mav.addObject("pageNum", pageNum);
mav.addObject("pageSize", pageSize);
mav.addObject("totalPages", totalPages);
return mav;
}
在上述代码中,@RequestParam
注解用于绑定请求参数,当没有传入参数时,默认为第1页,每页显示10条记录。将处理结果以及分页信息放入ModelAndView中,最后返回给页面显示。
4.2. 示例2:使用Bootstrap实现分页显示
在页面中,我们可以使用Bootstrap框架提供的分页插件来实现分页显示。例如,以下是一个使用Bootstrap的分页设计示例:
<nav aria-label="Page navigation">
<ul class="pagination">
<li class="page-item">
<a class="page-link" href="#" aria-label="Previous">
<span aria-hidden="true">«</span>
</a>
</li>
<li class="page-item"><a class="page-link" href="#">1</a></li>
<li class="page-item"><a class="page-link" href="#">2</a></li>
<li class="page-item"><a class="page-link" href="#">3</a></li>
<li class="page-item">
<a class="page-link" href="#" aria-label="Next">
<span aria-hidden="true">»</span>
</a>
</li>
</ul>
</nav>
这段代码会在页面上渲染出一个带有“上一页”、“下一页”按钮的分页控件。我们可以在其中插入后台返回的分页信息,例如:
<nav aria-label="Page navigation">
<ul class="pagination">
<li class="page-item">
<a class="page-link" href="#" aria-label="Previous">
<span aria-hidden="true">«</span>
</a>
</li>
<li class="page-item"><a class="page-link" href="#">1</a></li>
<li class="page-item"><a class="page-link" href="#">2</a></li>
<li class="page-item"><a class="page-link" href="#">3</a></li>
<li class="page-item">
<a class="page-link" href="#" aria-label="Next">
<span aria-hidden="true">»</span>
</a>
</li>
</ul>
</nav>
在上述代码中,根据返回的分页信息来确定分页控件中的页数和当前页标记。当用户点击“上一页”或者“下一页”按钮时,向后台发送请求即可。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Java Web 简单的分页显示实例代码 - Python技术站