MyBatis-Plus(baomidou)分页失败,查询全部数据

一句话描述

先简单描述我的问题和解决办法,争取一句话帮助到大家:

如题,我的问题是分页限制不生效,查询到全部数据。解决办法是通过查询MyBatis-Plus官网,添加分页配置。页面内容如下,同学们可以按照官网进行配置,也可看对比我下面的详细说明配置自己的项目。

问题详述

项目中使用了MyBatis-Plus,查询结果都正常,但是分页结果不正确,下面的代码为示例,主要功能是模糊查询名字和likeName相同的所有Student实体对象。正确查询的list结果大小应该为pageSize大小,但是分页限制没有生效,通过日志也可以看出生成的sql语句中不包含limit限制。

@Service
public class StudentServiceImpl implements StudentService {
    @Autowired
    private StudentMapper studentMapper;

    @Override
    public List<Student> getStudentLike(String likeName, Integer pageNum, Integer pageSize) {
        if(StringUtils.isEmpty(likeName)){
            return null;
        }

        LambdaQueryWrapper<Student> queryWrapper = Wrappers.<Student>lambdaQuery()
                .like(Student::getName, likeName)
                .eq(Student::getDelStatus, 0);

        Page<Student> page = new Page<>(pageNum.longValue(), pageSize.longValue());
        IPage<Student> iPage = settlementBankMapper.selectPage(page, queryWrapper);
        return iPage.getRecords();
    }
}

解决办法

添加分页配置即可,如文章开头贴的图,我在我的项目中添加了一个配置类,做MyBatis-Plus的配置。代码内容如下,注意配置自己的dao层目录,例,我这里配置的是上一段代码中的StudentMapper所在的目录。如果你需要注释中的优化操作,就将该条注释下的代码注释去掉即可。

@EnableTransactionManagement
@Configuration
@MapperScan("")// 这里配置自己项目的dao层目录
public class MybatisPlusConfig {
    @Bean
    public PaginationInterceptor paginationInterceptor() {
        PaginationInterceptor paginationInterceptor = new PaginationInterceptor();
        // 设置请求的页面大于最大页后操作, true调回到首页,false 继续请求  默认false
        // paginationInterceptor.setOverflow(false);
        // 设置最大单页限制数量,默认 500 条,-1 不受限制
        // paginationInterceptor.setLimit(500);
        // 开启 count 的 join 优化,只针对部分 left join
        paginationInterceptor.setCountSqlParser(new JsqlParserCountOptimize(true));
        return paginationInterceptor;
    }
}

然后重新启动分页即可执行。

建议多看官网,如果有需要详解这部分的,可以评论,我有时间会扩展这部分内容。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章