在线教育项目第一次课-搭建后端框架
分类: springboot 专栏: 新版在线教育项目 标签: 在线教育
2024-03-22 18:44:50 1142浏览
效果展示
讲师部分
课程分类
课程管理和发布课程
发布课程的时候,先添加章节,后添加小节
点击最终发布课程,就把课程的状态字段变成发布状态。
视频预览
要这种弹出阿里云播放器的效果
统计分析模块
前台首页
前台课程详情
前台讲师详情
前台视频播放
前台用户登录
前台用户注册
购买课程
微信扫码支付
项目开发安排
补充点:前台 前端 后台 后端
表设计
- edu_acl_permission资源表(菜单)
- edu_acl_role角色表
- edu_acl_role_permission角色资源中间表
- edu_acl_user后台用户
- edu_acl_user_role后台用户和角色中间表
- edu_banner轮播图表
- edu_chapter课程章节表
- edu_comment评论表
- edu_course课程表
- edu_course_collect课程收藏表
- edu_course_description课程描述表
- edu_member前台用户表(会员表)
- edu_order订单表
- edu_pay_log支付记录表
- edu_statistics_daily统计表
- edu_subject课程分类表
- edu_teacher讲师表
- edu_video小节表(含视频字段)
后端搭建
多模块思想
要求必须是多模块的架构(为将来学习分布式做准备)
集成swagger3
依赖
<dependency>
<groupId>com.github.xiaoymin</groupId>
<artifactId>knife4j-openapi3-jakarta-spring-boot-starter</artifactId>
<version>4.1.0</version>
</dependency>
application.yml配置
# 在线文档配置
springdoc:
swagger-ui:
# 配置swagger-ui界面访问路径
path: /swagger-ui.html
# 包扫描路径 换成你的control层
packages-to-scan: com.pjx.sys.controller
# 默认开启wend
api-docs:
enabled: true
swagger3配置类
import io.swagger.v3.oas.models.OpenAPI;
import io.swagger.v3.oas.models.info.Contact;
import io.swagger.v3.oas.models.info.Info;
import io.swagger.v3.oas.models.info.License;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class SwaggerConfig {
@Bean
public OpenAPI springShopOpenAPI() {
return new OpenAPI()
.info(new Info().title("杰凡在线教育")
//描叙
.description("我的API文档")
//版本
.version("v1")
//作者信息,自行设置
.contact(new Contact().name("王").email("1913284695@qq.com").url("https://www.jf3q.com"))
//设置接口文档的许可证信息
.license(new License().name("Apache 2.0").url("http://springdoc.org")));
}
}
常用的注解@Tag
controller 层
import com.example.test.pojo.Books;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@Tag(name = "测试",description = "描述")
@RestController
@RequestMapping("/getBooks")
public class BookController {
@GetMapping
@Operation(summary = "测试接口")
public Books getBooks(){
Books books = new Books();
books.setId(1);
return books;
}
}
实体类层
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
@Schema
@Data
public class Books {
@Schema(name = "id",description = "用户id",defaultValue = "12",example = "1")
private Integer id;
}
测试
localhost:端口/doc.html
切记:如果你集成了security等权限框架的时候,要在白名单放行
@Override
public void customize(WebSecurity web) {
web.ignoring().requestMatchers("/v3/**","/webjars/**","/doc.html", "/swagger-ui/**", "/v3/api-docs/**","/login","/swagger-ui.html");
}
全局异常
@RestControllerAdvice
public class GlobalException {
@ExceptionHandler(RuntimeException.class)
public ResultVo exception(RuntimeException e){
return ResultVo.error(e.getMessage());
}
}
自动填充创建时间和修改时间
import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler;
import org.apache.ibatis.reflection.MetaObject;
import org.springframework.stereotype.Component;
import java.util.Date;
@Component
public class MyMetaObjectHandler implements MetaObjectHandler {
@Override
public void insertFill(MetaObject metaObject) {
//属性名称,不是字段名称
this.setFieldValByName("eduCreate", new Date(), metaObject);
this.setFieldValByName("eduModified", new Date(), metaObject);
}
@Override
public void updateFill(MetaObject metaObject) {
this.setFieldValByName("eduModified", new Date(), metaObject);
}
}
/**
* 创建时间
*/
@ApiModelProperty(value = "创建时间")
@TableField(fill = FieldFill.INSERT)
private Date eduCreate;
/**
* 更新时间
*/
@ApiModelProperty(value = "创建时间")
@TableField(fill = FieldFill.INSERT_UPDATE)
private Date eduModified;
逻辑删除
区分物理删除和逻辑删除的区别,逻辑删除是假删除,只是把is_del这种字段从0变成1,因为数据是无价的,实际企业大部分用的都是逻辑删除。
具体做法,就是在实体类上加注解;
@TableLogic(value = "0",delval = "1")
private int isDel;
解释一下:
- value = “未删除的值,默认值为0”;若设置为2,则查询时 where 后面自动拼接 is_del = 2
- delval = “删除后的值,默认值为1”
从此执行删除方法的时候就变成了假删除,也就是逻辑删除。
另外需要注意的是MyBatis Plus 做所有查询操作时,自动会在 where 条件后面拼上 is_del = 0,所以 is_del 置一后,实现了逻辑删除
好博客就要一起分享哦!分享海报
此处可发布评论
评论(0)展开评论
展开评论
您可能感兴趣的博客