分页查询 - 1 - 分页类型
1.1 逻辑分页
取出所有数据到内存里,只展示分页所需数据
如下面的代码,自行实现了一个分页,用来展示数据,VO展示分页,传入的List<> 是全量数据
private Page<GuaranteeTaskTableShowVO> selfConstructShowVOPage(List<GuaranteeTask> visibleTaskList, Integer current, Integer size) {
Page<GuaranteeTaskTableShowVO> page = new Page<>();
page.setTotal(visibleTaskList.size());
page.setCurrent(current);
page.setSize(size);
// 总页数
int totalPages = (int) Math.ceil((double) page.getTotal() / page.getSize());
page.setPages(totalPages);
int startIndex = (current - 1) * size;
if (startIndex >= visibleTaskList.size()) {
startIndex = 0;
}
int endIndex = (int) Math.min(startIndex + size, page.getTotal());
// 原生的 task 列表
List<GuaranteeTask> taskPageList = visibleTaskList.subList(startIndex, endIndex);
// 翻译后的 vo
List<GuaranteeTaskTableShowVO> vos = originalTask2ShowVO(taskPageList);
// 放到 page 里面
page.setRecords(vos);
return page;
}
1.2 物理分页
取数据时,就只取分页后的数据
public class DAO {
@Resource
private WorkOperatorMapper workOperatorMapper;
/** 查询 */
public Page<WorkOperator> selectPageList(WorkOperatorQuery query) {
Page<WorkOperator> page = new Page<>(query.getCurrent(), query.getSize());
return workOperatorMapper.selectPage(page, selectWrapper(query));
}
/** 构建查询条件 */
private LambdaQueryWrapper<WorkOperator> selectWrapper(WorkOperatorQuery query) {
LambdaQueryWrapper<WorkOperator> wrapper = new LambdaQueryWrapper<>();
wrapper
.like(StringUtils.isNotEmpty(query.getName()), WorkOperator::getName, query.getName())
.eq(query.getType() != null, WorkOperator::getType, query.getType())
.like(StringUtils.isNotEmpty(query.getPhone()), WorkOperator::getPhone, query.getPhone())
.eq(query.getWorkComp() != null, WorkOperator::getWorkComp, query.getWorkComp())
.eq(query.getAreaId() != null, WorkOperator::getAreaId, query.getAreaId())
.eq(query.getStatus() != null, WorkOperator::getStatus, query.getStatus())
.in(CollectionUtils.isNotEmpty(query.getIds()), WorkOperator::getId, query.getIds())
.orderByDesc(WorkOperator::getId);
return wrapper;
}
}
1.3 Mybatis-Plus 配置拦截器进行分页
public class MyBatisPlusConfig {
@Bean
public MybatisPlusInterceptor mybatisPlusInterceptor(){
MybatisPlusInterceptor interceptor=new MybatisPlusInterceptor();
interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));
return interceptor;
}
}