Loading...
墨滴

null19

2021/04/23  阅读:90  主题:嫩青

mybatis-plus多条件分页查询

简单分页查询

  1. 使用的是mybatis-plus的分页插件
  2. 创建配置类,引入分页插件,分页插件代码例下
@Bean
    public PaginationInterceptor paginationInterceptor() {
        return new PaginationInterceptor();
    }
  1. controller中使用
  2. get方式访问,需在访问路径加入page变量(页数),与limit变量(记录条数)。
  3. 方法参数中也同样需加入这两个变量
  4. 创建page对象
  5. 调用page方法,进行分页查询。此page方法即mp的baseMapper中的selectPage方法。
  6. page方法两个参数,一个为此前创建的page对象,一个为条件查询的参数,可置为null。
  7. 从page对象中获取total与record数据
  8. 返回数据。代码如下
@GetMapping("pageList/{page}/{limit}")
    public R getPageTeacherList(@PathVariable Long page,
                                @PathVariable Long limit){
        //1.创建page对象
        Page<EduTeacher> pageTeacher = new Page<>(page, limit);
        
        //2.调用方法,分页查询
        eduTeacherService.page(pageTeacher,  null);
        
        //3.从pageTeacher中获取数据
        long total = pageTeacher.getTotal();
        List<EduTeacher> records = pageTeacher.getRecords();
        
        //4.返回数据
        return  R.ok().data("total",total).data("items",records);
    }
  1. return的代码采用统一返回数据格式与链式编程,可看之前的博客
return  R.ok().data("total",total).data("items",records);

多条件组合查询带分页

  1. 因为需要多条件查询,所以可创建一个实体类,专门用于封装查询数据
@Data
public class QueryTeacher {
    private String name;
    private String level;
    private String beginTime;
    private String endTime;
}
  1. controller的方法除了之前的两个参数,也要加上刚创建的实体类。实体类加上@RequestBody(required = false)注解,即参数需为json格式且一些数据可以不要
  2. 创建page对象
  3. 掉用service的方法实现条件查询,并分页
  4. service中创建条件查询的方法,参数为page对象与封装查询数据的QueryTeacher对象
  5. 判断queryTeacher是否有数据,没有数据即为无条件查询分页,直接查询分页并return
  6. queryTeacher不为空,则将queryTeacher的数据取出来
  7. 创建QueryWrapper对象
  8. 判断是否有条件值,有则拼接查询条件
  9. 使用baseMapper.selectPage()条件查询并分页,两个参数,一个为page对象,一个为查询条件QueryWrapper
  10. service代码如下
@Service
public class EduTeacherServiceImpl extends ServiceImpl<EduTeacherMapper, EduTeacher> implements EduTeacherService {
    //条件查询带分页
    @Override
    public void pageListCondition(Page<EduTeacher> pageTeacher, QueryTeacher queryTeacher) {
        //1.判断是否有条件值,有,则拼接条件
        if (queryTeacher == null) {
            //直接查询分页,不进行条件操作
            baseMapper.selectPage(pageTeacher, null);
            return;
        }

        //如果queryTeacher不为空,则取值
        String name=queryTeacher.getName();
        String level=queryTeacher.getLevel();
        String begin=queryTeacher.getBeginTime();
        String end=queryTeacher.getEndTime();

        //判断是否有条件值,有则拼接
        QueryWrapper<EduTeacher> QueryWrapper = new QueryWrapper<>();
        if (!StringUtils.isEmpty(name)){
            //拼接
            QueryWrapper.like("name",name);
        }
        if (!StringUtils.isEmpty(level)){
            QueryWrapper.eq("level",level);
        }
        if (!StringUtils.isEmpty(begin)){
            QueryWrapper.ge("gmt_create",begin);
        }
        if (!StringUtils.isEmpty(end)){
            QueryWrapper.le("gmt_create",end);
        }

        //条件查询带分页
        baseMapper.selectPage(pageTeacher,QueryWrapper);
    }
}
  1. controller中从page对象中获取数据,并返回。controller代码如下
 @PostMapping("moreConditionPageList/{page}/{limit}")
    public R moreConditionPageList(@PathVariable Long page,
                                   @PathVariable Long limit,
                                   @RequestBody(required = false) QueryTeacher queryTeacher){
        //创建page对象
        Page<EduTeacher> pageTeacher = new Page<>(page, limit);
        //调用service的方法实现条件查询并分页
        eduTeacherService.pageListCondition(pageTeacher,queryTeacher);

        //从pageTeacher中获取数据
        long total = pageTeacher.getTotal();
        List<EduTeacher> records = pageTeacher.getRecords();

        return  R.ok().data("total",total).data("items",records);
    }

null19

2021/04/23  阅读:90  主题:嫩青

作者介绍

null19