课程管理-删除课程删除视频(远程调用) | 学习笔记

简介: 简介:快速学习课程管理-删除课程删除视频(远程调用)

开发者学堂课程【微服务+全栈在线教育实战项目演练(SpringCloud Alibaba+SpringBoot):课程管理-删除课程删除视频(远程调用)】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址:https://developer.aliyun.com/learning/course/667/detail/11419


课程管理-删除课程删除视频(远程调用)

 

第一步我们先来加入注解,加入依赖和相关配置,加完之后我们新建一个interface,里面调用指定服务的名称,在 interface 中,将方法注入,

//定义调用删除多个视频的方法

将 vod,control 中的方法直接复制到这里,就可以了,

//参数多个视频 id List videoIdlist

@DeleteMapping("delete-batch")

public R deleteBatch(@RequestParam("videoIdList") List videoIdList)

完成之后,完善一下路径,改成完全路径,加上 eduvod/video,后面加一个delete-batch,

//定义调用删除多个视频的方法

//删除多个阿里云视频的方法

//参数多个视频 id List videoIdlist

@DeleteMapping("/eduvod/video/delete-batch")

public R deleteBatch(@RequestParam("videoIdList") List videoIdList):

在 vodclient 中把发布方法进行自我定义,之后来到我们的调的过程中进行调用方式,我们找到删除课程的方法,

//删除课程

@DeleteMapping("{courseId}")

public R deleteCourse(@PathVariable String courseId){

courseService. removeCourse(courseId);

return R. ok();

进入到 removeCourse 中,进入实现类中,在实现类中有如下内容:

//删除课程@Override

public void removeCourse(String courseId) {

//1 根据课程 id 删除小节

eduVideoService.removeVideoByCourseId(courseId)

找到 removeVideoByCourseId,进入最终到方法中,根据视频 id 删除小节,而我们现在就是根据课程 id 删除视频,那就要先查出来视频 id,把课程中所有的视频 id都查出来,在小节表中查到视频 id,写下方法:

//1 根据课程 id 删除小节

// TODO 删除小节,删除对应视频文件

@Override

public void removeVideoByCourseId(String courseId) {

在此注入

//注入vodclient

@Autowired

private VodClient vodClient

调用里面的方法,给他进行删除

//1 根据课程 id 查询课程所有的视频 id

QueryWrapperwrapperVideo = new QueryWrapper<>():

wrapperVideo.eq( column:"course_id",courseId);

在这里设置条件,因为我们要根据课程 id 查视频,所以要写课程 id,

wrapperVideo select(“video- source- i”)

ListeduVideoList=baseMapper.selectList(wrapperVideo)

因为这里可能有一个或者多个视频,所以我们使用 selectList,上传一个wrapperVideo,最后返回一个 list 集合,这里会有我们课程所有的小节对象,但是我们要得到所有的视频 id,然后我们直接取就可以,这是我们第一部分。

我们直接便利取值就可以,但是我们可以把方法优化一点,说明如下:

因为我们现在删除视频需要查询视频id,我们可以写

SELECT video- source- id FRoM edu video WHERE c...

直接查询视频 id 就可以, 就没有必要再查询别的字段,所以我们现在代码也可以这样做,只需要查询视频 id 就可以,

如下:

现在查询的话,就是查询所有默认字段,但我现在只想查询 video source 这个字段,这就叫查询指定的列,

而这个在我们的 wrapperVideo 里有个方法,这个需要牢记,因为我们后面也需要用到,就是 wrapperVideo select(“”),插入指定字段的名字,比如 video- source- id,这样的话,我们就可以查出指定字段的值,使用的是 select 方法,因为我们只需要指定的值,其他的就不需要了。

我们要从 eduVideoList 取里面的值,调用方法就可以做到,如果要调用 vodclient,要先注入。

Vodclient

这里虽然传入的是一个 list 集合,但不是 List,我们要写的是下面的这种效果,而不是里面传入对象,继续完善一下,

public static void main(String[] args)

List list = new ArrayList<>()

list.add("11");

list.add("22");

list.add("33");

// 11,22,33

取出值,传的是 list,这种没有其他的方法,只能取值 list 放入,得到每个值,取出视频 id,

//List变成List

ListvideoIds =new ArrayList<>(:

for (int i =0; i

EduVideo eduVideo = eduVideoList.get(i):

String videoSourceId =eduVideo. getVideoSourceId()

if(!StringUtils.isEmpty(videoSourceId))

//放到 videoIds 集合里面

videoIds.add(videoSourceId);

我们小节可能是空的,没有值,如果没有值得话,我们需要把空给放进去,所以我们需要判断,如果 videoSourceId 不等于空,那我们就可以放入值,放入 list 中,这就是完成了。

这就是一个主要的过程,把 videoSourceId 直接放入 videoIds,将 videoIds 直接传进来,

下面我们也需要做一个判断,因为上面的原因,小节里面可能一个视频都没有,那这个集合如果为空,如果为空,那我们就没必要远程调用去删除,所以需要做一个判断,

//就会根据多个视频 id 删除视频,

If(videoids,size()>0){

因为它是一个 list 集合,所以我们使用 size 判断,如果它大于0,说明它有值,有值再调用方法,进行删除,所以我们可以做出完善,如果没有值,就不需要删除,这样我们就完成了调用,过程可能会有点麻烦,但里边也不复杂,就是把多个视频id 查出来,然后进行删除,

vodClient.deleteBatch(videoIds):

我们代码就算完成了,删除视频之后我们再删除小节,但是我们不能先删小节,这样的话就查不到视频id了,所以我们要先删视频,再删小节,这样我们调用就完成了

QueryWrapper wrapper =new QueryWrapper<>() wrapper.eq(column:"course_id",courseId);

baseMapper. delete(wrapper);

//2根据课程id删除章节

chapterService.removeChapterByCourseId(courseId)

//3根据课程id删除描述

courseDescriptionService.removeById(courseId)

//4根据课程id删除课程本身

int result =baseMapper.deleteById(courseId) if(result == 0) { //失败返回

throw new GuliException(20001,"删除失败”)

相关文章
|
1月前
|
人工智能 Ubuntu 固态存储
《2核2G阿里云神操作!Ubuntu+Ollama低成本部署Deepseek模型实战》
本文详解如何在阿里云2核2G轻量服务器上,通过Ubuntu系统与Ollama框架部署Deepseek-R1-Distill-Qwen-1.5B大模型。涵盖环境搭建、Ollama安装、虚拟内存配置及模型运行全流程,助力开发者以极低成本实现AI模型云端运行。
422 1
《2核2G阿里云神操作!Ubuntu+Ollama低成本部署Deepseek模型实战》
|
11月前
|
算法 调度 Python
深入理解操作系统中的进程调度算法
在操作系统中,进程调度是核心任务之一,它决定了哪个进程将获得CPU的使用权。本文通过浅显易懂的语言和生动的比喻,带领读者了解进程调度算法的重要性及其工作原理,同时提供代码示例帮助理解。
|
SQL 关系型数据库 MySQL
postgresql|数据库|MySQL数据库向postgresql数据库迁移的工具pgloader的部署和初步使用
postgresql|数据库|MySQL数据库向postgresql数据库迁移的工具pgloader的部署和初步使用
1029 0
|
开发者
STM32中断详解及其编程实践
STM32中断详解及其编程实践
778 1
|
数据可视化 Java
让星星月亮告诉你,通过反射创建类的实例对象,并通过Unsafe theUnsafe来修改实例对象的私有的String类型的成员属性的值
本文介绍了如何使用 Unsafe 类通过反射机制修改对象的私有属性值。主要包括: 1. 获取 Unsafe 的 theUnsafe 属性:通过反射获取 Unsafe类的私有静态属性theUnsafe,并放开其访问权限,以便后续操作 2. 利用反射创建 User 类的实例对象:通过反射创建User类的实例对象,并定义预期值 3. 利用反射获取实例对象的name属性并修改:通过反射获取 User类实例对象的私有属性name,使用 Unsafe`的compareAndSwapObject方法直接在内存地址上修改属性值 核心代码展示了详细的步骤和逻辑,确保了对私有属性的修改不受 JVM 访问权限的限制
190 4
|
搜索推荐 前端开发 数据安全/隐私保护
改善用户体验方法
【10月更文挑战第9天】改善用户体验方法
1094 3
|
11月前
|
API 开发工具 git
.NET CORE CliWrap 命令行
【11月更文挑战第12天】`CliWrap` 是一个用于在 .NET 应用中执行外部命令行工具的库,支持 .NET Core 及以上版本。它通过简洁的 API 提供了命令执行、参数传递、工作目录设置、环境变量配置及错误处理等功能。安装可通过 NuGet 完成,示例代码展示了如何使用 `CliWrap` 执行 `dir` 命令并获取输出。
173 0
|
弹性计算 运维 Cloud Native
XGRIDS三维重建服务,构建云上数字孪生世界
基于阿里云建设三维重建云平台,搭建云端仿真资源池
XGRIDS三维重建服务,构建云上数字孪生世界
|
消息中间件 缓存 Linux
RT-Thread记录(十、全面认识 RT-Thread I/O 设备模型)
学完 RT-Thread 内核,从本文开始熟悉了解 RT-Thread I/O 设备管理相关知识。
1008 0
RT-Thread记录(十、全面认识 RT-Thread I/O 设备模型)
|
数据采集 监控 安全
新手如何构建一个入门级入侵检测系统
新手如何构建一个入门级入侵检测系统
794 1