使用Mybatisplus 做分页查询时,我们只需要构造查询语句,它会自动帮我们查询到总数,那么这个总数它是如何统计的呢?
而且当自定义的查询语句比较复杂时,如多表联表查询,统计总数还会报错.所以这时候需要弄清楚它是如何帮我们统计出总数,并且需要安装什么规范编写,避免它的报错.
通过仔细调试找到了:
PaginationInnerInterceptor的类
类中的方法:
protected String autoCountSql(IPage<?> page, String sql)
用于构造查询总数的SQL,当遇到问题时,可以到这个方法中寻找错误的原因.
另外,正是在willDoQuery方法中执行了SQL查询出总数,并填入到你的查询参数page对象中,供后面的正式查询使用.
如果你的查询确实太复杂,自动获取总数的方法无法满足你的需要,你可能需要自己手动去获取总数,实现方法也比较简单
- 禁用掉自动获取总数
tPage.setSearchCount(false);
- 编写查询总数的方法查出总数并填入到PAGE对象中
tPage.setTotal(mapper.count(queryWrapper));