使用 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层中只有一次查询,那么写在控制层是没有什么问题的,但是有多次查询的话,那么就必须得把分页插件放到最后一条查询前面,这样才能避免上述异常。

Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐