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

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

十二、将返回结果统一为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


相关文章
|
5月前
|
前端开发 Java
表白墙/留言墙 —— 初级SpringBoot项目,练手项目前后端开发(带完整源码) 全方位全步骤手把手教学
文章通过一个表白墙/留言墙的初级SpringBoot项目实例,详细讲解了如何进行前后端开发,包括定义前后端交互接口、创建SpringBoot项目、编写前端页面、后端代码逻辑及实体类封装的全过程。
138 3
表白墙/留言墙 —— 初级SpringBoot项目,练手项目前后端开发(带完整源码) 全方位全步骤手把手教学
|
前端开发 数据可视化 Java
第一篇:瑞吉外卖项目概述
第一篇:瑞吉外卖项目概述
3185 0
第一篇:瑞吉外卖项目概述
|
5月前
|
前端开发 Java 数据库连接
表白墙/留言墙 —— 中级SpringBoot项目,MyBatis技术栈MySQL数据库开发,练手项目前后端开发(带完整源码) 全方位全步骤手把手教学
本文是一份全面的表白墙/留言墙项目教程,使用SpringBoot + MyBatis技术栈和MySQL数据库开发,涵盖了项目前后端开发、数据库配置、代码实现和运行的详细步骤。
123 0
表白墙/留言墙 —— 中级SpringBoot项目,MyBatis技术栈MySQL数据库开发,练手项目前后端开发(带完整源码) 全方位全步骤手把手教学
|
10月前
|
人工智能 小程序 Java
基于B/S架构springboot框架开发的中小学智慧校园平台源码
基于B/S架构springboot框架开发的中小学智慧校园平台源码
139 0
|
Java 测试技术 数据库
基于SpringBoot的大学生成长管理系统的设计与实现
基于SpringBoot的大学生成长管理系统的设计与实现
555 0
|
Java 测试技术 数据库
谷粒学苑项目实战(二):讲师管理模块搭建(上)
谷粒学苑项目实战(二):讲师管理模块搭建
258 0
谷粒学苑项目实战(二):讲师管理模块搭建(上)
|
SQL Java 程序员
谷粒学苑项目实战(十三):课程管理模块搭建
谷粒学苑项目实战(十三):课程管理模块搭建
199 0
谷粒学苑项目实战(十三):课程管理模块搭建
|
JSON 前端开发 easyexcel
谷粒学苑项目实战(十二):课程分类管理模块搭建
谷粒学苑项目实战(十二):课程分类管理模块搭建
214 0
谷粒学苑项目实战(十二):课程分类管理模块搭建
|
前端开发 API
谷粒学苑项目实战(八):实现登录功能
前面我们已经搭建了前端环境,运行起来后是可以看见登录框的,但是由于后端没有写东西,不能成功登录,今天我们就完成这个功能。
221 0
谷粒学苑项目实战(八):实现登录功能
|
前端开发 JavaScript Java
谷粒学院——Day05【后台系统前端项目创建、讲师管理模块前端开发】
谷粒学院——Day05【后台系统前端项目创建、讲师管理模块前端开发】
216 0
谷粒学院——Day05【后台系统前端项目创建、讲师管理模块前端开发】