一句話描述
先簡單描述我的問題和解決辦法,爭取一句話幫助到大家:
如題,我的問題是分頁限制不生效,查詢到全部數據。解決辦法是通過查詢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;
}
}
然後重新啓動分頁即可執行。
建議多看官網,如果有需要詳解這部分的,可以評論,我有時間會擴展這部分內容。