springboot pagehelper分页查询失效
时间: 2024-12-28 07:28:33 浏览: 5
### 解决 Spring Boot 中 PageHelper 分页查询失效的方法
#### 1. 检查 Maven 依赖配置
确保 `pom.xml` 文件中正确引入了 PageHelper 的依赖项。以下是推荐的依赖配置:
```xml
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper-spring-boot-starter</artifactId>
<version>1.2.10</version>
</dependency>
```
此版本兼容大多数 Spring Boot 应用程序环境[^2]。
#### 2. 配置 MyBatis 和 PageHelper 插件
为了使 PageHelper 正常工作,需在应用程序配置类或属性文件中启用并配置相应的插件。通常情况下,在 `application.yml` 或者 `application.properties` 文件里添加如下配置即可:
对于 YAML 格式的配置文件 (`application.yml`):
```yaml
mybatis-plus:
configuration:
map-underscore-to-camel-case: true
pagehelper:
helperDialect: mysql # 设置数据库方言
reasonable: true # 是否合理化分页参数,默认false.
supportMethodsArguments: true # 支持通过Mapper接口参数来传递分页参数
```
如果使用 properties 格式,则应这样写入配置:
```properties
mybatis.configuration.map-underscore-to-camel-case=true
pagehelper.helperDialect=mysql
pagehelper.reasonable=true
pagehelper.supportMethodsArguments=true
```
这些设置有助于提高分页功能的有效性和灵活性[^3]。
#### 3. Service 层代码调整
当执行 SQL 查询之前立即调用 `PageHelper.startPage()` 方法,并传入当前页面编号以及每页记录数量作为参数。注意该方法应当紧挨着查询逻辑前被调用,以确保其作用范围仅限于随后的一次查询操作。
例如,在 service 实现层可以这样做:
```java
import com.github.pagehelper.PageHelper;
import org.springframework.stereotype.Service;
@Service
public class UserService {
public PageInfo<UserDTO> getUsers(int pageNum, int pageSize){
// 开始分页
PageHelper.startPage(pageNum, pageSize);
List<UserDTO> userList = userMapper.selectAllUsers();
return new PageInfo<>(userList);
}
}
```
这段代码展示了如何利用 PageHelper 进行分页处理,其中 `pageNum` 表示请求的具体页码,而 `pageSize` 则指定了每页展示的数据量[^4]。
#### 4. Controller 请求映射优化
确保前端发送过来的分页参数能够正确地传递给服务端控制器中的相应变量。可以通过路径参数、查询字符串等方式获取到这两个必要的分页参数——即 `pageNum` 和 `pageSize`。
比如 RESTful API 接口设计可采用如下形式:
```java
@RestController
@RequestMapping("/api/users")
public class UserController {
@Autowired
private UserService userService;
@GetMapping("")
public ResponseEntity<?> getUserPages(@RequestParam(defaultValue="1") Integer pageNum,
@RequestParam(defaultValue="10") Integer pageSize){
try{
PageInfo<UserDTO> pageInfo = userService.getUsers(pageNum, pageSize);
Map<String,Object> responseMap=new HashMap<>();
responseMap.put("total", pageInfo.getTotal());
responseMap.put("data", pageInfo.getList());
return ResponseEntity.ok(responseMap);
}catch(Exception e){
logger.error(e.getMessage(),e);
throw new RuntimeException("Error occurred while fetching users.");
}
}
}
```
这里设置了默认值以防缺失必要参数的情况发生;同时捕获异常以便更好地管理错误场景下的响应行为。
阅读全文