谷粒学苑项目实战(二):讲师管理模块搭建(下)

简介: 谷粒学苑项目实战(二):讲师管理模块搭建

十二、将返回结果统一为json数据


     

在我的谷粒学苑(四)中介绍,传送门:

     

谷粒学苑项目实战(四):将返回结果统一为json格式        


十三、实现讲师的多条件分页查询功能



根据讲师名称name,讲师头衔level、讲师入驻时间gmt_create(时间段)查询


1、 将讲师的所有条件封装成一个类

     

在entity包下创建vo包(view object),创建TeacherQuery类

@Data
public class TeacherQuery {
    @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;
}


2、在controller中写实现的功能

     

其实实现分页和多条件查询的逻辑代码更应该放在service层中,我们先写在controller层中,后续再进行优化

/**
     * 讲师的多条件分页查询
     * @param current 当前页
     * @param limit 每页数量
     * @param teacherQuery 讲师条件
     * @return
     */
    @PostMapping("pageTeacher/{current}/{limit}")
    public R pageTeacher(@PathVariable long current,
                         @PathVariable long limit,
                         //使用RequestBody需要POST提交,不用使用GET    required = false 表示可以缺省(没有条件就查全部)
                         @RequestBody(required = false) TeacherQuery teacherQuery){
        //创建page对象
        Page<EduTeacher> pageTeacher = new Page<>(current, limit);
        //构建条件
        QueryWrapper<EduTeacher> queryWrapper = new QueryWrapper<>();
        //多条件组合查询
        Integer level = teacherQuery.getLevel();
        String name = teacherQuery.getName();
        String begin = teacherQuery.getBegin();
        String end = teacherQuery.getEnd();
        //判断条件值是否为空,不为空则构造条件
        if (!StringUtils.isEmpty(name)){
            queryWrapper.like("name", name);    //传入字段的名字和值
        }
        if (!StringUtils.isEmpty(level)){
            queryWrapper.like("level", level);
        }
        if (!StringUtils.isEmpty(begin)){
            queryWrapper.ge("gmt_create", begin);   //传入表中字段的名字和值
        }
        if (!StringUtils.isEmpty(end)){
            queryWrapper.le("gmt_create", end);
        }
        //实现分页
        eduTeacherService.page(pageTeacher, queryWrapper);
        long total = pageTeacher.getTotal();
        List<EduTeacher> records = pageTeacher.getRecords();
        return R.ok().data("total", total).data("rows", records);
    }


3、在swagger中测试

     

启动运行,打开swagger-ui

f91a33a6ef5141399e2a185e1df827ed.png


点击 try it out


29637bb14eb6454fbc5cbfbc635a000a.png


可以看到找到两个名字中带“王”的讲师。


十四、自动填充时间



由于我们每次插入数据时都要写插入时间和修改时间,非常麻烦。可以做一些操作让它自动填充。


1、封装自动填充类

       

在service_base下新建handler包,创建类MyMetaObjectHandler

@Component
public class MyMetaObjectHandler implements MetaObjectHandler {
    @Override
    public void insertFill(MetaObject metaObject) {
        //属性名称,不是字段名称
        this.setFieldValByName("gmtCreate", new Date(), metaObject);
        this.setFieldValByName("gmtModified", new Date(), metaObject);
    }
    @Override
    public void updateFill(MetaObject metaObject) {
        this.setFieldValByName("gmtModified", new Date(), metaObject);
    }
}


2、在实体类上添加注解


69a7f7f989ea42899f9dd7d340e631fc.png


十五、 实现讲师增加功能



1、逻辑代码

     

这个功能比较简单,在controller中完成

//添加讲师
    @PostMapping("/addTeacher")
    public R createTeacher(@RequestBody EduTeacher eduTeacher){
        boolean save = eduTeacherService.save(eduTeacher);
        if (save){
            return R.ok();
        } else {
            return R.error();
        }
    }



2、测试

     

这里需要注意的是,时间有自动填充,是不需要传的;id可以自动生成,也不需要传。

56c86356ffc341188dbdb701536f6f80.png9b1feadc23244a949e305a10855c7a55.png


成功,再看看数据库


ad0fd29ee78746508ed34d551e8095a1.png

如果插入的时候id报错了,把实体类上的id注解改为@TableId(value = "id", type = IdType.ID_WORKER_STR)


十六、实现讲师修改功能


       

讲师修改分为两个部分:根据id回显 和 修改讲师信息 。这两个功能都比较简单


1、根据id查询讲师


//根据id查询讲师
    @GetMapping("/getTeacher/{id}")
    public R getTeacher(@PathVariable String id){
        EduTeacher eduTeacher = eduTeacherService.getById(id);
        return R.ok().data("teacher", eduTeacher);
    }


2、修改讲师信息


//修改讲师
    @PostMapping("updateTeacher")
    public R updateTeacher(@RequestBody EduTeacher eduTeacher){
        boolean flag = eduTeacherService.updateById(eduTeacher);
        if (flag){
            return R.ok();
        } else {
            return R.error();
        }
    }


修改也可以有不同的写法,比如可以用PutMapping,那么这时用RequestBody时需要手动把id设置上去

46b17dd6c03c454f995428d3d5af4099.png


3、测试


(1)根据id查询

c4f4cd49e4994757a6d93cdfd214923e.png1c85b5439f2a4392a2e12969bb5aa720.png


(2) 修改

             

不需要传时间,但因为根据id修改,所以要传id

             

将id为1的讲师level改为5

dd52784ae2574e2eb7fd3fbcc99e07e5.pnga11167d1ee3c44738d04d5aa473d095c.pngd7c2d9ee9b864df7b6d6551648edaf88.png


相关文章
|
6月前
|
前端开发 NoSQL Java
谷粒学苑笔记整理
谷粒学苑笔记整理
200 0
|
3月前
|
SQL 安全 前端开发
毕设答辩问题讲解说明:基于SpringBoot+Vue的汉服文化交流社区平台设计与开发
这篇文章是关于一个基于SpringBoot+Vue的汉服文化交流社区平台的毕业设计答辩问题讲解,涵盖了系统功能、亮点创新、数据库设计、积分领取机制、数据库安全和个人密码修改功能等方面的答辩问题和回答要点。
|
5月前
|
监控 JavaScript 安全
杨校老师课堂之基于SpringBoot + Vue 的智能停车场平台设计
杨校老师课堂之基于SpringBoot + Vue 的智能停车场平台设计
35 0
|
小程序 测试技术 数据库
0022Java程序设计-ssm微信小程序社区互助平台
0022Java程序设计-ssm微信小程序社区互助平台
51 0
|
Dubbo 前端开发 Java
【尚好房项目实战】:第一章项目架构介绍
【尚好房项目实战】:第一章项目架构介绍
|
Java 测试技术 数据库
谷粒学苑项目实战(二):讲师管理模块搭建(上)
谷粒学苑项目实战(二):讲师管理模块搭建
227 0
谷粒学苑项目实战(二):讲师管理模块搭建(上)
|
SQL Java 程序员
谷粒学苑项目实战(十三):课程管理模块搭建
谷粒学苑项目实战(十三):课程管理模块搭建
176 0
谷粒学苑项目实战(十三):课程管理模块搭建
|
存储 JSON 前端开发
谷粒学院——Day02【环境搭建和讲师管理接口开发】
谷粒学院——Day02【环境搭建和讲师管理接口开发】
330 0
谷粒学院——Day02【环境搭建和讲师管理接口开发】
|
JSON 前端开发 easyexcel
谷粒学苑项目实战(十二):课程分类管理模块搭建
谷粒学苑项目实战(十二):课程分类管理模块搭建
191 0
谷粒学苑项目实战(十二):课程分类管理模块搭建
|
存储 JavaScript 前端开发
谷粒学院——Day03【项目前端相关基础知识一】
谷粒学院——Day03【项目前端相关基础知识一】
96 0
谷粒学院——Day03【项目前端相关基础知识一】