【在线教育】- 讲师模块功能实现


上篇: 【在线教育】- 项目介绍 && 数据库设计 (1)

一、实现讲师列表接口

1.1 POJO

  • 在z-domain项目中创建实体类EduTeacher
    • TeacherVo
@Data//lombok注解
@ApiModel(value = "EduTeacher对象",description = "讲师")//swagger注解
//@TableName("edu_teacher")
public class EduTeacher {

    @TableId(value = "id",type = IdType.AUTO)//mybatis-plus的注解
    @ApiModelProperty(value = "讲师ID")//swagger注解
    private Integer id;
    @ApiModelProperty(value = "讲师姓名")
    private String name;
    @ApiModelProperty(value = "讲师资历,一句话说明讲师")
    private String intro;
    @ApiModelProperty(value = "讲师简介")
    private String career;
    @ApiModelProperty(value = "头衔 1高级讲师 2首席讲师")
    private Integer level;
    @ApiModelProperty(value = "讲师头像")
    private String avatar;
    @ApiModelProperty(value = "讲师排序")
    private Integer sort;
    @ApiModelProperty(value = "逻辑删除 1已删除, 0未删除")
    @TableField(value = "is_deleted",fill = FieldFill.INSERT)
    @TableLogic//逻辑删除
    private Integer isDeleted;
    @ApiModelProperty(value = "创建时间")
    @TableField(value = "gmt_create",fill = FieldFill.INSERT)
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")
    private Date gmtCreate;
    @ApiModelProperty(value = "更新时间")
    @TableField(value = "gmt_modified",fill = FieldFill.INSERT_UPDATE)
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")
    private Date gmtModified;

}

1.2 mapper

mapper

@Mapper
public interface EduTeacherMapper extends BaseMapper<EduTeacher> {
}

1.3 service

service

  • 接口
public interface EduTeacherService extends IService<EduTeacher> {
}
  • 实现类
@Service
public class EduTeacherServiceImpl extends ServiceImpl<EduTeacherMapper, EduTeacher> implements EduTeacherService {
}

1.4 controller

controller

@RestController
@RequestMapping("/teacher")
@Api(tags = "老师接口", description = "老师接口描述,完成增删改查操作")        //swagger 类级别的注解,显示中文类名
public class EduTeacherController {
    
    @Resource
    private EduTeacherService eduTeacherService;

   /**
     * 查询所有
     * @return
     */
    @GetMapping
    @ApiOperation(value = "查询所有老师")                 //swagger 方法级别的注解,显示中文方法名
    public BaseResult<List<EduTeacher>> selectAll() {
        // 查询
        List<EduTeacher> list = eduTeacherService.list();
        // 返回
        return BaseResult.ok("查询成功", list);
    }
}

1.5 拷贝配置类

配置类

  • MyBatisPlusConfig
@Component
public class MyBatisPlusConfig {
    @Bean
    public MybatisPlusInterceptor mybatisPlusInterceptor(){
        MybatisPlusInterceptor mybatisPlusInterceptor = new MybatisPlusInterceptor();
        mybatisPlusInterceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));
        return mybatisPlusInterceptor;
    }
}
  • Swagger2ConfigurationV3
/**
 * Swagger2 配置类,
 * 访问路径:swagger-ui.html
 * 自动注册:
 *     位置:resources/META-INF/spring.factories
 *     内容:
 *        org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
 *          com.czxy.changgou4.config.Swagger2Configuration
 */
@Configuration
@EnableSwagger2
public class Swagger2ConfigurationV3 {

    @Bean
    public Docket createRestApi() {
        // 1 确定文档Swagger版本
        Docket docket = new Docket(DocumentationType.SWAGGER_2);
        // 2 设置 api基本信息
        docket.apiInfo(apiInfo());
        // 3 设置自定义加载路径
        docket = docket.select()
                .apis(RequestHandlerSelectors.basePackage("com.czxy"))
                .paths(PathSelectors.any())
                .build();
        //4 设置权限
        docket.securitySchemes(securitySchemes());
        docket.securityContexts(securityContexts());

        return docket;
    }

    private ApiInfo apiInfo() {
        return new ApiInfoBuilder()
                .title("API")
                .description("基于swagger接口文档")
                .contact(new Contact("xxx","http://www.xxx.com"))
                .version("1.0")
                .build();
    }

    private List<ApiKey> securitySchemes() {
        List<ApiKey> list = new ArrayList<>();
        // name 为参数名  keyname是页面传值显示的 keyname, name在swagger鉴权中使用
        list.add(new ApiKey("Authorization", "Authorization", "header"));
        return list;
    }

    private List<SecurityContext> securityContexts() {
        List<SecurityContext> list = new ArrayList<>();
        list.add(SecurityContext.builder()
                .securityReferences(defaultAuth())
                .forPaths(PathSelectors.regex("^(?!auth).*$"))
                .build());
        return list;
    }

    private List<SecurityReference> defaultAuth() {
        AuthorizationScope authorizationScope = new AuthorizationScope("global", "accessEverything");
        AuthorizationScope[] authorizationScopes = new AuthorizationScope[1];
        authorizationScopes[0] = authorizationScope;
        List<SecurityReference> list = new ArrayList();
        list.add(new SecurityReference("Authorization", authorizationScopes));
        return list;
    }

}

1.6 测试

测试

二、讲师逻辑删除

2.1 controller中添加删除方法

/**
     * 通过id删除
     * @param teacherId
     * @return
     */
    @ApiOperation(value = "根据ID删除讲师")
    @ApiImplicitParams(value = {
            @ApiImplicitParam(name = "teacherId", value = "讲师ID", required = true,paramType = "path")//方式一
    })
    @DeleteMapping("/{teacherId}")
    public BaseResult deleteById(@PathVariable("teacherId") Integer teacherId) {
        // 删除操作
        boolean result = eduTeacherService.removeById(teacherId);
        // 处理
        if(result) {
            return BaseResult.ok("删除成功");
        }
        return BaseResult.error("删除失败");
    }

2.2 完善JavaBean:EduTeacher

EduTeacher

@ApiModelProperty(value = "逻辑删除 1(true)已删除, 0(false)未删除")
@TableLogic
@TableField(fill = FieldFill.INSERT, value = "is_deleted")
private Boolean isDeleted;

2.3 配置Handler

handler

@Component
public class TeacherMetaObjectHandler implements MetaObjectHandler {
    @Override
    public void insertFill(MetaObject metaObject) {
        // 添加时,填充的内容
        // this.setFieldValByName("字段名", 字段值 , metaObject);
        this.setFieldValByName("isDeleted",0 , metaObject);

    }

    @Override
    public void updateFill(MetaObject metaObject) {
        // 修改时,填充的内容

    }
}

2.4 配置application.yml 文件

  • 配置指定删除和不删除的状态。
    application.yml
mybatis-plus:
  configuration:
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
  global-config:
    db-config:
      logic-delete-value: 1
      logic-not-delete-value: 0

2.5 逻辑删除测试

逻辑删除测试

三、分页条件查询

3.1 分页条件查询

3.1.1 创建 TeacherVo

TeacherVo

  • TeacherVo
@Data
public class TeacherVo {
    private String name;        //讲师姓名
    private String level;       //头衔
    private String beginDate;   //开始时间
    private String endDate;     //结束时间
}

3.1.2 controller

/**
     * 条件 + 分页 查询
     * @param teacherVo
     * @param size
     * @param current
     * @return
     */
    @ApiOperation("条件+分页查询")
    @PostMapping("/condition/{size}/{current}")
    public BaseResult condition(
            @RequestBody TeacherVo teacherVo,
            @PathVariable("size") Integer size,
            @PathVariable("current") Integer current) {
        // 条件查询 + 分页
        Page<EduTeacher> page = eduTeacherService.condition(teacherVo, size, current);
        // 返回
        return BaseResult.ok("查询成功", page);
    }

3.1.3 service

  • 接口
/**
     * 条件 + 分页 查询
     * @param teacherVo
     * @param size
     * @param current
     * @return
     */
    Page<EduTeacher> condition(TeacherVo teacherVo, Integer size, Integer current);
  • 实现类
@Override
    public Page<EduTeacher> condition(TeacherVo teacherVo, Integer size, Integer current) {
        //1 条件
        QueryWrapper<EduTeacher> queryWrapper = new QueryWrapper<>();
        // 1.1  姓名 模糊
        if(StringUtils.isNotBlank(teacherVo.getName())) {
            queryWrapper.like("name", teacherVo.getName());
        }
        // 1.2  头衔 精确(等值)
        if(StringUtils.isNotBlank(teacherVo.getLevel())) {
            queryWrapper.eq("level", teacherVo.getLevel());
        }
        // 1.3  创建时间 范围
        if(StringUtils.isNotBlank(teacherVo.getBeginDate())) {
            queryWrapper.ge("gmt_create", teacherVo.getBeginDate() + " 00:00:00" );
        }
        if(StringUtils.isNotBlank(teacherVo.getEndDate())) {
            queryWrapper.le("gmt_create", teacherVo.getEndDate() + " 23:59:59");
        }

        //2 分页
        Page<EduTeacher> page = new Page<>(current, size);

        //3 查询
        baseMapper.selectPage(page, queryWrapper);
        //4 关联
        //5 返回
        return page;
    }

3.2 分页条件查询测试

条件分页查询

四、讲师新增和修改

4.1 讲师新增

  • controller
/**
     * 添加老师
     * @param eduTeacher
     * @return
     */
    @ApiOperation("添加")
    @PostMapping
    public BaseResult save(@ApiParam(name = "eduTeacher", value = "老师" , required = true) @RequestBody EduTeacher eduTeacher) {
        if(true) {
//            throw new RuntimeException("用户存在");
//            throw new EduException("用户存在");
            // 将上面的代码抽取工具类
//            ExceptionUtils.cast("用户已存在");
        }
        // 保存
        boolean result = eduTeacherService.save(eduTeacher);
        // 提示
        if(result) {
            return BaseResult.ok("添加成功");
        }
        return BaseResult.error("添加失败");
    }

4.2 根据ID查询

  • controller
/**
     * 通过id查询详情
     * @param teacherId
     * @return
     */
    @GetMapping("/{teacherId}")
    public BaseResult<EduTeacher> findById(@PathVariable("teacherId") Integer teacherId ) {
//        int i = 1 / 0;
        // 查询
        EduTeacher eduTeacher = eduTeacherService.getById(teacherId);
        if(eduTeacher != null) {
            // 返回
            return BaseResult.ok("查询成功", eduTeacher);
        }
        return BaseResult.error("查询失败");
    }

4.3 修改

  • controller
 /**
     * 修改
     * @param eduTeacher
     * @return
     */
    @PutMapping
    public BaseResult updateById(@RequestBody EduTeacher eduTeacher) {
        // 修改
        boolean result = eduTeacherService.updateById(eduTeacher);
        // 返回
        if(result) {
            return BaseResult.ok("修改成功");
        }
        return BaseResult.error("修改失败");
    }

4.4 批量处理

  • controller
/**
     * 批量删除
     * @param ids
     * @return
     */
    @PostMapping("/batchDelete")
    public BaseResult batchDelete(@RequestBody List<Integer> ids) {
        // 批量删除
        boolean result = eduTeacherService.removeByIds(ids);
        // 返回
        if(result) {
            return BaseResult.ok("批量删除成功");
        }
        return BaseResult.error("批量删除失败");

    }

4.5 修改处理类:自动填充

  • handler
@Component
public class TeacherMetaObjectHandler implements MetaObjectHandler {
    @Override
    public void insertFill(MetaObject metaObject) {
        // 添加-自动填充数据
        setFieldValByName("isDeleted", 0, metaObject);
        // 添加时间、修改时间
        setFieldValByName("gmtCreate", new Date(), metaObject);
        setFieldValByName("gmtModified", new Date(), metaObject);
    }

    @Override
    public void updateFill(MetaObject metaObject) {
        // 修改时间
        setFieldValByName("gmtModified", new Date(), metaObject);
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值