java.lang.ClassCastException: java.util.ArrayList cannot be cast to com.github.pagehelper.Page 异常
使用 com.github.pagehelper 分页插件 出现上述的错误大致意思就是类型转换错误使用的是 spring boot 项目要以加载下面的依赖:<dependency><groupId>com.github.pagehelper</groupId><artifactId>pagehelper-spring-boot-starter<
·
使用 com.github.pagehelper 分页插件 出现上述的错误大致意思就是类型转换错误
使用的是 spring boot 项目要以加载下面的依赖:
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper-spring-boot-starter</artifactId>
<version>1.3.0</version>
</dependency>
大家可以适当的调整版本,也不一定要使用 我上面的版本,可以用最新的。
在执行的过程中为什么会出现如下的异常,在我查看我写的代码后,发现了,执行顺序的问题,在使用 PageHelper.startPage(page,rows); 进行分页后,接下来要执行 查询数据库的代码,只能执行一次,而不能执行多次,比如下面的错误代码:
控制层:
@GetMapping("/userList")
@ResponseBody
public Response listUsers(int page, int rows){
PageHelper.startPage(page,rows);
PageInfo<User> users = new PageInfo<User>(iUserService.listUsers());
return response.success("查询成功!", users);
}
调用的service层:
public Page<User> listUsers(String type, String realName, String account, String status) {
QueryWrapper queryWrapper = new QueryWrapper();
Map<String, String> map = new HashMap<>();
map.put("realname",realName);
List<Map<String,Object>> users = baseMapper.selectUserList(map); //这里查询了一次数据库
return (Page<User>)baseMapper.selectList(queryWrapper); //这里又进行了一次查询 分页插件不知道以谁为准
}
这里如果我们要正确,其实很简单 把 PageHelper.startPage(page,rows); 分页放到service层中 正确写法就是
public Page<User> listUsers(int page,int rows,String type, String realName, String account, String status) {
QueryWrapper queryWrapper = new QueryWrapper();
Map<String, String> map = new HashMap<>();
map.put("realname",realName);
List<Map<String,Object>> users = baseMapper.selectUserList(map);
PageHelper.startPage(page,rows)
return (Page<User>)baseMapper.selectList(queryWrapper);
}
这样子查询就不会出问题了,所以避免出上述的问题,大家还是把进行分页的代码,都放到service层中进行分页就好了。
究其原因就在于pageHelper是通过mybatis的pulgin实现了Interceptor接口:
如果在service层中只有一次查询,那么写在控制层是没有什么问题的,但是有多次查询的话,那么就必须得把分页插件放到最后一条查询前面,这样才能避免上述异常。
更多推荐



所有评论(0)