第十次课:存储过程删课程-若依框架改造
分类: springboot 专栏: 在线教育项目实战 标签: 存储过程删课程-若依框架改造
2023-05-16 11:01:34 677浏览
存储过程介绍
MySQL 5.0版本开始支持存储过程。
存储过程(Stored Procedure)是一种在数据库中存储复杂程序,以便外部程序调用的一种数据库对象。
存储过程是为了完成特定功能的SQL语句集,经编译创建并保存在数据库中,用户可通过指定存储过程的名字并给定参数(需要时)来调用执行。
存储过程思想上很简单,就是数据库SQL语言层面的代码封装与重用。
通俗来讲:存储过程其实就是能完成一定操作的一组SQL语句
优点
- 存储过程可封装,并隐藏复杂的商业逻辑。
- 存储过程可以回传值,并可以接受参数。
- 防止sql注入,运行效率高。
- 存储过程可以用在数据检验,强制实行商业逻辑等。
缺点
- 存储过程,往往定制化于特定的数据库上,因为支持的编程语言不同。当切换到其他厂商的数据库系统时,需
要重写原有的存储过程。
- 存储过程的性能调校与撰写,受限于各种数据库系统。
参数类型分类
存储过程的参数类型可以是 IN、OUT 和 INOUT。根据这点分类如下:
- 没有参数(无参数无返回);
- 仅仅带 IN 类型(有参数无返回);
- 仅仅带 OUT 类型(无参数有返回);
- 既带 IN 又带 OUT(有参数有返回)
- 带 INOUT(有参数有返回);
注意:IN、OUT、INOUT 都可以在一个存储过程中带多个。
创建存储过程
CREATE PROCEDURE [IF NOT EXISTS] <存储过程名> (IN|OUT|INOUT 参数名 参数类型, ...) [characteristic ...] BEGIN 存储过程体 END
delimiter问题
在Mysql中,因为存储过程中的SQL语句必须以分号结尾,而mysql的cmd窗口在遇到sql语句加分号时,会直接执行语句,而发送冲突导致存储过程创建失败。因此我们要修改存储过程的结束符,让mysql可以识别。
示例如下,注意的是 DELIMITER 和 $符号之间 必须要有空格,END 和 $符号之间 不能有空格,并且在结束时,要将结束符修改回来,一样要有空格。
DELIMITER $ CREATE PROCEDURE LOGIN_YZ(INOUT a INT,INOUT b INT) BEGIN SET a = 2; SET b = b*2; END$ DELIMITER ;
注意:声明语句结束符,可以自定义
DELIMITER $$ 或 DELIMITER //
END IF语句
IF yourCondition THEN yourStatement ELSE yourStatement END IF
hello word
CREATE PROCEDURE hello() BEGIN SELECT CONCAT('hello word'); END CALL hello
删除课程基本信息
delimiter $$ CREATE PROCEDURE `deleteCourse`(in cid CHAR,out result int) begin declare c int; declare v int; -- 查看下有没有章节 select count(*) into c from edu_chapter where course_id=cid ; if c>0 then set result=-2; else -- 查看属于该课程的小节 select count(*) into v from edu_video where course_id=cid; if v>0 then set result=-1; else -- 删除课程描述和课程基本信息 update edu_course set edu_modified=NOW(),is_deleted=1 where id=cid ; delete from edu_course_description where id=cid ; set result=1; end if; end if; end$$ delimiter ;
java 调用存储过程
public void del(String id) { EduCourse course=new EduCourse(); course.setId(id); baseMapper.del(course); if (-2==course.getResult()){ throw new JfException(50000,"该课程下有章节,删除失败!"); } if (-1==course.getResult()){ throw new JfException(50000,"该课程下有小节,删除失败!"); } //TODO记得删除存在阿里云上的视频文件 代码省略 }
实体类改造
@ApiModelProperty(value = "返回结果,存储过程使用") @TableField(exist = false) private Integer result;
mybatis的sql映射文件
<select id="del" statementType="CALLABLE"> call deleteCourse(#{id,mode=IN,jdbcType=CHAR},#{result,mode=OUT,jdbcType=INTEGER}) </select>
若依框架改造项目
下载vue前后分离版本
快速入门文档:http://doc.ruoyi.vip/ruoyi-vue/
克隆代码到本地
git clone https://gitee.com/y_project/RuoYi-Vue
修正配置
主要是redis和MySQL的配置,修正好后启动Redis,mysql导入若依的基础sql文件,把整个项目先跑起来(含后端接口和前端vue)
建表
可以用Navicat在若依的数据库里建一个表。以讲师管理为例
一键生成代码
可以生成前端页面代码,也可以生成后端java代码
修改菜单表
上一步生成的代码里找到.sql文件,执行下即可
复制后端代码
有controller service mapper entity sql映射文件等,复制粘贴到对应位置即可
复制前端代码
主要是一个vue页面和一个js文件,放到对应位置即可。
其他常用工具
可以拖拽的形式生成vue页面代码
效果
剩下的微调代码即可。
好博客就要一起分享哦!分享海报
此处可发布评论
评论(0)展开评论
展开评论
您可能感兴趣的博客