springboot手写分页
时间: 2023-10-13 15:28:36 浏览: 121
好的,下面是手写分页的步骤:
1. 在Controller中获取当前页数和页面大小,即pageNum和pageSize。
2. 在Service中查询总记录数totalCount,并计算出总页数totalPage。
3. 根据pageNum和pageSize计算出当前页的起始索引startIndex。
4. 在Mapper中使用LIMIT语句获取当前页的数据。
5. 将查询结果封装成Page对象,包括当前页码pageNum、页面大小pageSize、总记录数totalCount、总页数totalPage和当前页的数据。
6. 将Page对象返回给Controller。
下面是一个简单的示例代码:
Controller层:
```java
@GetMapping("/list")
public Page<User> list(@RequestParam(defaultValue = "1") int pageNum,
@RequestParam(defaultValue = "10") int pageSize) {
return userService.getUserList(pageNum, pageSize);
}
```
Service层:
```java
public Page<User> getUserList(int pageNum, int pageSize) {
int totalCount = userDao.countUsers();
int totalPage = (totalCount + pageSize - 1) / pageSize;
int startIndex = (pageNum - 1) * pageSize;
List<User> userList = userDao.getUserList(startIndex, pageSize);
return new Page<>(pageNum, pageSize, totalCount, totalPage, userList);
}
```
Mapper层:
```java
@Select("SELECT * FROM user LIMIT #{startIndex}, #{pageSize}")
List<User> getUserList(@Param("startIndex") int startIndex, @Param("pageSize") int pageSize);
@Select("SELECT COUNT(*) FROM user")
int countUsers();
```
Page类:
```java
public class Page<T> {
private int pageNum;
private int pageSize;
private int totalCount;
private int totalPage;
private List<T> data;
// 构造函数和getter/setter方法省略
}
```
以上就是手写分页的简单实现,需要注意的是在高并发情况下,手写分页可能存在性能问题,建议使用一些优秀的分页插件,如MyBatis-PageHelper等。
阅读全文