最简单的分页查询

首先配置一个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);