一句话描述
先简单描述我的问题和解决办法,争取一句话帮助到大家:
如题,我的问题是分页限制不生效,查询到全部数据。解决办法是通过查询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;
}
}
然后重新启动分页即可执行。
建议多看官网,如果有需要详解这部分的,可以评论,我有时间会扩展这部分内容。