首先配置一个mybatisPlus拦截器。
@Configuration
public class MybatisPlusConfig {
@Bean
public MybatisPlusInterceptor paginationInterceptor(){
MybatisPlusInterceptor mybatisPlusInterceptor = new MybatisPlusInterceptor();
PaginationInnerInterceptor paginationInnerInterceptor = new PaginationInnerInterceptor(DbType.MYSQL);
mybatisPlusInterceptor.addInnerInterceptor(paginationInnerInterceptor);
return mybatisPlusInterceptor;
}
}
直接在Controller中使用Mapper的selectPage方法即可
@GetMapping("/m2")
public IPage m2(){
Page<User> page = new Page<>(0, 2); // 0表示页数,2表示每页多少个
IPage ipage = userMapper.selectPage(page, null);
System.out.println(ipage);
return ipage;
}
通过Service进行条件分页查询,比如我们查询特定名字的菜品,然后在根据菜品ID,查询菜品的类别表,把菜品类别加上。
// 构造分页对象,构造条件,添加条件,排序
Page<Dish> ipage = new Page<>(page, pageSize);
LambdaQueryWrapper<Dish> lambdaQueryWrapper = new LambdaQueryWrapper<>();
lambdaQueryWrapper.like(name != null, Dish::getName, name);
lambdaQueryWrapper.orderByDesc(Dish::getUpdateTime);
// 初步菜品查询成功
dishService.page(ipage, lambdaQueryWrapper);
// 根据菜品ID把菜品的类别添加上,此时的Page的泛型应该是DishDto
Page<DishDto> pageInfo = new Page<>();
// 通过流,对每个菜品的id查询菜品类别表
List<Dish> records = ipage.getRecords();
List<DishDto> dishDtoRecords = records.stream().map((item) -> {
DishDto dishDto = new DishDto();
Long categoryId = item.getCategoryId();
Category category = categoryService.getById(categoryId);
// 把属性进行复制,这样可能会快一些?
BeanUtils.copyProperties(item, dishDto);
if(category != null) {
dishDto.setCategoryName(category.getName());
}else {
dishDto.setCategoryName("未知");
}
return dishDto;
}).toList();
// 把ipage除了records属性的数据,都拷贝到pageInfo中去
BeanUtils.copyProperties(ipage, pageInfo, "records");
// 最后把dishDtoRecords的数据都设置上去
pageInfo.setRecords(dishDtoRecords);