java如何编写分页
分页实现方法
在Java中实现分页功能通常涉及数据库查询和前端展示两个部分。以下是几种常见的实现方式:
使用SQL语句分页
MySQL数据库可以使用LIMIT和OFFSET关键字实现分页:
SELECT * FROM table_name LIMIT pageSize OFFSET (pageNum - 1) * pageSize
Oracle数据库可以使用ROWNUM:
SELECT * FROM (
SELECT a.*, ROWNUM rn FROM (
SELECT * FROM table_name ORDER BY id
) a WHERE ROWNUM <= pageNum * pageSize
) WHERE rn > (pageNum - 1) * pageSize
MyBatis分页实现
在MyBatis中可以直接使用分页SQL:
<select id="selectByPage" resultType="com.example.Entity">
SELECT * FROM table_name
LIMIT #{pageSize} OFFSET #{offset}
</select>
Spring Data JPA分页
Spring Data JPA提供了内置的分页支持:
Pageable pageable = PageRequest.of(pageNum - 1, pageSize, Sort.by("id").descending());
Page<User> page = userRepository.findAll(pageable);
List<User> users = page.getContent();
long total = page.getTotalElements();
PageHelper分页插件
MyBatis的PageHelper插件可以简化分页操作:
PageHelper.startPage(pageNum, pageSize);
List<User> users = userMapper.selectAll();
PageInfo<User> pageInfo = new PageInfo<>(users);
前端分页参数传递
通常前端需要传递以下参数:
- pageNum:当前页码
- pageSize:每页显示数量
- sortField:排序字段
- sortOrder:排序方式(asc/desc)
分页结果封装
建议统一封装分页返回结果:
public class PageResult<T> {
private Integer pageNum;
private Integer pageSize;
private Long total;
private List<T> list;
// getter/setter
}
性能优化建议
大数据量分页时避免使用OFFSET,改用WHERE条件:

SELECT * FROM table_name WHERE id > lastId ORDER BY id LIMIT pageSize
考虑使用缓存机制减少数据库查询压力,对于复杂查询可以提前计算总页数。






