mp条件分页查询

mp条件分页查询

注:在本子模块下,建立一个配置类(存放所有的配置):

​ 先创建个包config(存储所有的配置类),再创建mp的配置类:MpConfig

​ 添加一个@Configuration,再把配置放进去。再把启动类中的中的@MapperScan(“com.zpc.myplus02.mapper”)添加过来

插入插件:

@Configuration  //这是必备,说明这是一个配置类
@MapperScan("com.zpc.eduservice.mapper")   //用来扫描,调用mapper,也可放在启动类
public class EduConfig {

    /**
     * 逻辑删除插件
     */
    @Bean
    public ISqlInjector sqlInjector() {
        return new LogicSqlInjector();
    }

    /**
     * 分页插件
     */
    @Bean
    public PaginationInterceptor paginationInterceptor() {
        return new PaginationInterceptor();

    }

}

法1:直接于controller写了逻辑

一:创建个vo包,在entity下,先定义一个vo对象(创建个类),用来弄查询的条件类型

@ApiModel(value = "Teacher查询对象", description = "讲师查询对象封装")
@Data
public class TeacherQuery implements Serializable {
    
    //Serializable是一个空接口,没有什么具体内容,它的目的只是简单的标识一个类的对象可以被序列化
    //比如过你要将某个特定的对象保存到文件中,我隔几天在把它拿出来用,那么这时候就要实现Serializable接口
    
    private static final long serialVersionUID = 1L;

    @ApiModelProperty(value = "教师名称,模糊查询")
    private String name;

    @ApiModelProperty(value = "头衔 1高级讲师 2首席讲师")
    private Integer level;

    @ApiModelProperty(value = "查询开始时间", example = "2019-01-01 10:10:10")
    private String begin;//注意,这里使用的是String类型,前端传过来的数据无需进行类型转换

    @ApiModelProperty(value = "查询结束时间", example = "2019-12-01 10:10:10")
    private String end;

}

逻辑

    //该查询新定义实体类,用以条件TeacherQuery
    //条件分页查询
    @ApiOperation(value = "条件分页查询")
    @PostMapping("pageTeacherCondition/{current}/{limit}")  //@PostMapping和@GetMapping意义上一样,不过@RequestBody必须使用@PostMapping
    public R pageTeacherCondition(
            @PathVariable long current,
            @PathVariable long limit,
            @RequestBody(required = false) TeacherQuery teacherQuery){  
        //这是引入那个teacherQuery,也就是引入条件  required = false表示不可为空
        //@RequestBody,使用json传递数据,将json数据封装到对应对象,required表示其可以为空.@ResponseBody是返回json数据
        //创建page对象
        Page<EduTeacher> pageTeacher=new Page<>(current,limit);

        //创建wrapper条件
        QueryWrapper<EduTeacher> wrapper=new QueryWrapper<>();

        //开始构造条件(多条件组合查询)
        //取出所有值
        //这块就是那些需要判定条件,取出来
        String name = teacherQuery.getName();
        Integer level = teacherQuery.getLevel();
        String begin = teacherQuery.getBegin();
        String end = teacherQuery.getEnd();
        //判断条件值是否为空,不为空拼接条件
        if (!StringUtils.isEmpty(name)) {
            wrapper.like("name", name);    //like是模糊查询,相当于'%输入的字%'
        }
        if (!StringUtils.isEmpty(level) ) {
            wrapper.eq("level", level);   //eq是等于
        }
        if (!StringUtils.isEmpty(begin)) {
            wrapper.ge("gmt_create", begin);   //ge是大于等于
        }
        if (!StringUtils.isEmpty(end)) {
            wrapper.le("gmt_modified", end);        //le是小于等于
        }

        //调用方法实现分页查询
        teacherService.page(pageTeacher,wrapper);

        long total=pageTeacher.getTotal();   //总记录数
        List<EduTeacher> records= pageTeacher.getRecords();  //数据集合
        return R.ok().data("total",total).data("rows",records);
    }

法2:于实现类写逻辑,标准法

创建Vo类

@Data
public class CourseFrontVo {

    @ApiModelProperty(value = "课程名称")
    private String title;

    @ApiModelProperty(value = "讲师id")
    private String teacherId;

    @ApiModelProperty(value = "一级类别id")
    private String subjectParentId;

    @ApiModelProperty(value = "二级类别id")
    private String subjectId;

    @ApiModelProperty(value = "销量排序")
    private String buyCountSort;

    @ApiModelProperty(value = "最新时间排序")
    private String gmtCreateSort;

    @ApiModelProperty(value = "价格排序")
    private String priceSort;
}

在countroller

    @Autowired
    private EduCourseService courseService;

    //1 条件查询带分页查询课程,前台
    @PostMapping("getFrontCourseList/{page}/{limit}")
    public R getFrontCourseList(@PathVariable long page,@PathVariable long limit,
                                @RequestBody (required = false) CourseFrontVo courseFrontVo){
        //创建page对象
        Page<EduCourse> pageCourse=new Page<>(page,limit);
        //创建wrapper条件
        QueryWrapper<EduTeacher> wrapper=new QueryWrapper<>();
        Map<String,Object> map = courseService.getCourseFrontList(pageCourse,courseFrontVo);

        return R.ok().data(map);
    }

实现类中

    //1 条件查询带分页查询课程,前台
    @Override
    public Map<String, Object> getCourseFrontList(Page<EduCourse> pageCourse, CourseFrontVo courseFrontVo) {

        //根据讲师id查询课程
        QueryWrapper<EduCourse> wrapper=new QueryWrapper<>();

        //取出所有值 与 判断条件值是否为空,不为空拼接  合一
        if(!StringUtils.isEmpty(courseFrontVo.getSubjectParentId())) { //一级分类
            wrapper.eq("subject_parent_id",courseFrontVo.getSubjectParentId());
        }
        if(!StringUtils.isEmpty(courseFrontVo.getSubjectId())) { //二级分类
            wrapper.eq("subject_id",courseFrontVo.getSubjectId());
        }
        if(!StringUtils.isEmpty(courseFrontVo.getBuyCountSort())) { //关注度(降序排列)
            wrapper.orderByDesc("buy_count");
        }
        if(!StringUtils.isEmpty(courseFrontVo.getGmtCreateSort())) { //最新(降序排列)
            wrapper.orderByDesc("gmt_create");
        }
        if(!StringUtils.isEmpty(courseFrontVo.getPriceSort())) {//价格(降序排列)
            wrapper.orderByDesc("price");
        }

        //把条件添加进去到pageCourse(分页)中
        baseMapper.selectPage(pageCourse,wrapper);


        //创建一个list集合,将东西取出来 先 放到集合中,然后放到map集合中
        List<EduCourse> records = pageCourse.getRecords();
        long current = pageCourse.getCurrent();
        long pages = pageCourse.getPages();
        long size = pageCourse.getSize();
        long total = pageCourse.getTotal();
        boolean hasNext = pageCourse.hasNext();//下一页
        boolean hasPrevious = pageCourse.hasPrevious();//上一页

        //把分页数据获取出来,放到map集合
        Map<String, Object> map = new HashMap<>();
        map.put("items", records);
        map.put("current", current);
        map.put("pages", pages);
        map.put("size", size);
        map.put("total", total);
        map.put("hasNext", hasNext);
        map.put("hasPrevious", hasPrevious);

        //map返回
        return map;
    }
  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值