2022.06.29

D:\A-File\技术\JAVA\尚硅谷硅谷课堂项目

工程目录结构
image.png

image.png

讲师管理接口

后台管理系统-讲师管理接口

09-第二天内容介绍.png

查询和删除

查询所有讲师、删除讲师

  1. /**
  2. * 讲师 前端控制器
  3. * @author atguigu
  4. */
  5. @RestController
  6. @RequestMapping(value="/admin/vod/teacher")
  7. public class TeacherController {
  8. @Autowired
  9. private TeacherService teacherService;
  10. //查询所有讲师列表
  11. @GetMapping("findAll")
  12. public List<Teacher> findAll(){
  13. List<Teacher> list = teacherService.list();
  14. return list;
  15. }
  16. //删除讲师
  17. @DeleteMapping("remove/{id}")
  18. public boolean removeById(@PathVariable String id){
  19. return teacherService.removeById(id);
  20. }
  21. }

测试删除接口
删除讲师接口是delete提交方式,使用浏览器无法直接访问测试,可以通过工具测试,比如Postman,我们这里通过整合Swagger2进行接口测试

前后端分离开发模式中,api文档是最好的沟通方式。Swagger 是一个规范和完整的框架,用于生成、描述、调用和可视化 RESTful 风格的 Web 服务。及时性 (接口变更后,能够及时准确地通知相关前后端开发人员)规范性 (并且保证接口的规范性,如接口的地址,请求方式,参数及响应格式和错误信息)一致性 (接口信息一致,不会出现因开发人员拿到的文档版本不一致,而出现分歧)可测性 (直接在接口文档上进行测试,以方便理解业务)

12-整合swagger.png

统一返回结果对象

项目中我们会将响应封装成json返回,一般我们会将所有接口的数据格式统一, 使前端(iOS Android, Web)对数据的操作更一致、轻松。

  1. import io.swagger.annotations.ApiModel;
  2. import io.swagger.annotations.ApiModelProperty;
  3. import lombok.Data;
  4. /**
  5. * 全局统一返回结果类
  6. *
  7. */
  8. @Data
  9. @ApiModel(value = "全局统一返回结果")
  10. public class Result<T> {
  11. @ApiModelProperty(value = "返回码")
  12. private Integer code;
  13. @ApiModelProperty(value = "返回消息")
  14. private String message;
  15. @ApiModelProperty(value = "返回数据")
  16. private T data;
  17. public Result(){}
  18. public static <T> Result<T> build(T body, Integer code, String message) {
  19. Result<T> result = new Result<T>();
  20. if (body != null) {
  21. result.setData(body);
  22. }
  23. result.setCode(code);
  24. result.setMessage(message);
  25. return result;
  26. }
  27. public static<T> Result<T> ok(){
  28. return Result.ok(null);
  29. }
  30. /**
  31. * 操作成功
  32. * @param data baseCategory1List
  33. * @param <T>
  34. * @return
  35. */
  36. public static<T> Result<T> ok(T data){
  37. return build(data,200,"成功");
  38. }
  39. public static<T> Result<T> fail(){
  40. return Result.fail(null);
  41. }
  42. /**
  43. * 操作失败
  44. * @param data
  45. * @param <T>
  46. * @return
  47. */
  48. public static<T> Result<T> fail(T data){
  49. return build(data, 201,"失败");
  50. }
  51. public Result<T> message(String msg){
  52. this.setMessage(msg);
  53. return this;
  54. }
  55. public Result<T> code(Integer code){
  56. this.setCode(code);
  57. return this;
  58. }
  59. }

了解:泛型,Data注解,json的对象和数组两种格式

  1. @Api(tags = "讲师管理接口")
  2. @RestController
  3. @RequestMapping(value="/admin/vod/teacher")
  4. public class TeacherController {
  5. @Autowired
  6. private TeacherService teacherService;
  7. // http://localhost:8301/admin/vod/teacher/findAll
  8. //1 查询所有讲师
  9. @ApiOperation("查询所有讲师")
  10. @GetMapping("findAll")
  11. public Result findAllTeacher() {
  12. //调用service方法
  13. List<Teacher> list = teacherService.list();
  14. return Result.ok(list).message("查询数据成功");
  15. }
  16. // remove/1
  17. //2 逻辑删除讲师
  18. @ApiOperation("逻辑删除讲师")
  19. @DeleteMapping("remove/{id}")
  20. public Result removeTeacher(@ApiParam(name = "id", value = "ID", required = true)
  21. @PathVariable Long id) {
  22. boolean isSuccess = teacherService.removeById(id);
  23. if(isSuccess) {
  24. return Result.ok(null);
  25. } else {
  26. return Result.fail(null);
  27. }
  28. }
  29. }

分页条件查询讲师

  1. /**
  2. * 配置类
  3. */
  4. @Configuration
  5. @MapperScan("com.atguigu.ggkt.vod.mapper")
  6. public class VodConfig {
  7. /**
  8. * 分页插件
  9. */
  10. @Bean
  11. public PaginationInterceptor paginationInterceptor() {
  12. return new PaginationInterceptor();
  13. }
  14. }
  15. ///////////////////////
  16. //创建查询条件对象
  17. @Data
  18. public class TeacherQueryVo {
  19. @ApiModelProperty(value = "讲师姓名")
  20. private String name;
  21. @ApiModelProperty(value = "头衔 1高级讲师 2首席讲师")
  22. private Integer level;
  23. @ApiModelProperty(value = "入驻时间")
  24. private String joinDateBegin;
  25. @ApiModelProperty(value = "入驻时间")
  26. private String joinDateEnd;
  27. }
  28. ///////////////////////
  29. //条件查询分页列表
  30. @ApiOperation(value = "获取分页列表")
  31. @PostMapping("{page}/{limit}")
  32. public Result index(
  33. @ApiParam(name = "page", value = "当前页码", required = true)
  34. @PathVariable Long page,
  35. @ApiParam(name = "limit", value = "每页记录数", required = true)
  36. @PathVariable Long limit,
  37. @ApiParam(name = "teacherVo", value = "查询对象", required = false)
  38. @RequestBody(required = false) TeacherQueryVo teacherQueryVo) {
  39. //创建page对象,传递当前页和每页记录数
  40. Page<Teacher> pageParam = new Page<>(page, limit);
  41. //获取条件值
  42. String name = teacherQueryVo.getName();//讲师名称
  43. Integer level = teacherQueryVo.getLevel();//讲师级别
  44. String joinDateBegin = teacherQueryVo.getJoinDateBegin();//开始时间
  45. String joinDateEnd = teacherQueryVo.getJoinDateEnd();//结束时间
  46. //封装条件
  47. QueryWrapper<Teacher> wrapper = new QueryWrapper<>();
  48. if(!StringUtils.isEmpty(name)) {
  49. wrapper.like("name",name);
  50. }
  51. if(!StringUtils.isEmpty(level)) {
  52. wrapper.eq("level",level);
  53. }
  54. if(!StringUtils.isEmpty(joinDateBegin)) {
  55. wrapper.ge("join_date",joinDateBegin);
  56. }
  57. if(!StringUtils.isEmpty(joinDateEnd)) {
  58. wrapper.le("join_date",joinDateEnd);
  59. }
  60. //调用方法得到分页查询结果
  61. IPage<Teacher> pageModel = teacherService.page(pageParam, wrapper);
  62. return Result.ok(pageModel);
  63. }

@RequestBody
与post提交一起使用
15-requestBody注解.png

修改讲师

//编写id查询方法
@ApiOperation(value = "获取")
@GetMapping("get/{id}")
public Result get(@PathVariable Long id) {
    Teacher teacher = teacherService.getById(id);
    return Result.ok(teacher);
}

//编写修改方法
@ApiOperation(value = "修改")
@PutMapping("update")
public Result updateById(@RequestBody Teacher teacher) {
    teacherService.updateById(teacher);
    return Result.ok(null);
}

批量删

@ApiOperation(value = "根据id列表删除")
@DeleteMapping("batchRemove")
//传入json的数组格式,如[1,2]
public Result batchRemove(@RequestBody List<Long> idList) {
    teacherService.removeByIds(idList);
    return Result.ok(null);
}

统一异常处理(全局)

16-统一异常处理.png

前端

VSCode 输入 !会出现基本代码块

ES6语法

19-es6语法.png

Vue语法和基础

讲师前端开发

28-讲师列表前端.png