第十次课:存储过程删课程-若依框架改造

飞一样的编程
飞一样的编程
擅长邻域:Java,MySQL,Linux,nginx,springboot,mongodb,微信小程序,vue

分类: springboot 专栏: 在线教育项目实战 标签: 存储过程删课程-若依框架改造

2023-05-16 11:01:34 677浏览

存储过程删课程-若依框架改造

存储过程介绍

MySQL 5.0版本开始支持存储过程。

存储过程(Stored Procedure)是一种在数据库中存储复杂程序,以便外部程序调用的一种数据库对象。

存储过程是为了完成特定功能的SQL语句集,经编译创建并保存在数据库中,用户可通过指定存储过程的名字并给定参数(需要时)来调用执行。

存储过程思想上很简单,就是数据库SQL语言层面的代码封装与重用。

通俗来讲:存储过程其实就是能完成一定操作的一组SQL语句

优点

  • 存储过程可封装,并隐藏复杂的商业逻辑。
  • 存储过程可以回传值,并可以接受参数。
  • 防止sql注入,运行效率高。
  • 存储过程可以用在数据检验,强制实行商业逻辑等。

缺点

  • 存储过程,往往定制化于特定的数据库上,因为支持的编程语言不同。当切换到其他厂商的数据库系统时,需

要重写原有的存储过程。

  • 存储过程的性能调校与撰写,受限于各种数据库系统。

参数类型分类

存储过程的参数类型可以是 IN、OUT 和 INOUT。根据这点分类如下:

  1. 没有参数(无参数无返回);
  2. 仅仅带 IN 类型(有参数无返回);
  3. 仅仅带 OUT 类型(无参数有返回);
  4. 既带 IN 又带 OUT(有参数有返回)
  5. 带 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>

若依框架改造项目

官网:http://ruoyi.vip/

下载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展开评论

暂无评论,快来写一下吧

展开评论

您可能感兴趣的博客

客服QQ 1913284695