Mysql存储过程知识点总结+Mybatisplus调用存储过程案例实现

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

存储过程思想上很简单,就是数据库SQL语言层面的代码封装与重用,通俗来讲存储过程其实就是能完成一定操作的一组SQL语句

二、存储过程的优缺点

========================================================================

优点

  • 存储过程可封装,并隐藏复杂的商业逻辑。

  • 存储过程可以回传值,并可以接受参数。

  • 存储过程无法使用SELECT指令来运行,因为他是子程序,与查看表,数据表或用户定义函数不同。

  • 存储过程可以用在数据校验,强制实行商业逻辑等。

缺点

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

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

三、存储过程的创建与调用

==========================================================================

  • 存储过程就是具有名字的一段代码,用来完成一个特定的功能

  • 创建的存储过程保存在数据库的数据字典中

1.创建存储过程:


CREATE

[DEFINER = {user| CURRENT_USER }]

PROCEDURE sp_name ([proc_parameter[…]])

[characteristic …] routine_body

[begin_lavle:]

BEGIN

[statement_list]

END [end_label]

proc_parameter:

[IN | OUT | INOUT ] param_name type 三种类型

routine_body:校验SQL运行时的一些参数

valid SQL routine statement


DELIMITER $$

DELIMITER //

在mysql8.0之后的版本也可直接用;结尾

声明存储过程:

CREATE PROCEDURE demo_in_oarameter(IN p_in int)

存储过程开始与结束符号

BEGIN .... END

变量赋值

SET @p_in=1

变量定义

DECLARE l_int int unsigned default 4000000

创建mysql存储过程,存储函数:

create procedure 存储过程名(参数)

存储过程体

create function 存储函数名(参数)

调用存储过程

call sp_name[(传参)]

四、存储过程的参数

=======================================================================

MYSQL存储过程的参数用在存储过程的定义,共有三种参数类型,IN,OUT,INOUT,形式如:

CREATE PROCEDURE 存储过程名([[IN | OUT | INOUT] 参数名 数据类型…])

  • IN输入参数:表示调用者向过程传入值(传入值可以是字面量或变量)
  • OUT输出参数:表示过程向调用者传出值(可以返回多个值)(传出值只能是变量)
  • INOUT输入输出参数:既表示调用者向过程传入值,又表示过程向调用者传出值(值只能是变量)

注意:

1.如果存储过程没有参数,也必须在过程名后面写上小括号

CREATE PROCEDURE sp_name ([proc_parameter[…]])

2.确保参数的名字不等于列的名字,否则在过程体中,参数名被当做列名来处理

建议:

  • 输入值使用in参数

  • 返回值使用out参数

  • inout参数尽量少用

变量定义:

局部变量声明一定要放在存储过程的开始:

DECLARE variable_name [,varible_name…] datatype [DEFAULT value]

变量赋值:

x SET 变量名 = 表达式值 [,varible_name = expression…]

五、MybatisPlus调用存储过程

=================================================================================

表数据

部门表t_department

在这里插入图片描述

增加部门信息我们可以写一个存储过程

完成下列几步操作:

1.插入自己指定的部门信息

2.查找插入之后部门的id

3.查找父部门的deppath

4.对自己的deppath进行更新

存储过程MyaddDep

USE yeb$$

DROP PROCEDURE IF EXISTS MyAddDep$$

CREATE DEFINER=root@localhost PROCEDURE MyAddDep(IN depName VARCHAR(32),IN parentId INT,IN enabled BOOLEAN,OUT result INT,OUT result2 INT)

BEGIN

DECLARE did INT;

DECLARE parPath VARCHAR(64);

– 1.插入自己指定的部门信息

INSERT INTO t_department SET NAME=depName,parentId=parentId,enabled=enabled;

SELECT ROW_COUNT() INTO result; – result为插入语句作用的行数

– 2.查找插入之后部门的id

SELECT LAST_INSERT_ID() INTO did; – did现在是插入部门信息的id

SET result2=did;

– 3.查找父部门的depPath

SELECT depPath INTO parPath FROM t_department WHERE id=parentId;

– 4.对自己的deppath进行更新

UPDATE t_department SET depPath=CONCAT(parPath,‘.’,did) WHERE id=did;

– 5.父部门的isParent更新为1

UPDATE t_department SET isParent=TRUE WHERE id=parentId;

END$$

DELIMITER ;

controller


package com.wql.server.controller;

import com.wql.server.pojo.Department;

import com.wql.server.pojo.RespBean;

import com.wql.server.service.IDepartmentService;

import io.swagger.annotations.ApiOperation;

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.web.bind.annotation.*;

import java.util.List;

/**

  • 前端控制器

  • @author wql

  • @since 2021-05-03

*/

@RestController

@RequestMapping(“/system/basic/department”)

public class DepartmentController {

@Autowired

IDepartmentService departmentService;

@ApiOperation(“增加部门信息”)

@PutMapping(“/”)

public RespBean addDep(@RequestBody Department department){

return departmentService.addDep(department);

}

}

DepartmentServiceImpl


package com.wql.server.service.impl;

import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;

import com.wql.server.mapper.DepartmentMapper;

import com.wql.server.pojo.Department;

import com.wql.server.pojo.RespBean;

import com.wql.server.service.IDepartmentService;

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.stereotype.Service;

import java.util.List;

/**

  • 服务实现类

  • @author wql

  • @since 2021-05-03

*/

@Service

public class DepartmentServiceImpl extends ServiceImpl<DepartmentMapper, Department> implements IDepartmentService {

@Autowired

DepartmentMapper departmentMapper;

/**

*增加部门信息

  • @param department

  • @return

最后

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数Java工程师,想要提升技能,往往是自己摸索成长,自己不成体系的自学效果低效漫长且无助。

因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,不论你是刚入门Java开发的新手,还是希望在技术上不断提升的资深开发者,这些资料都将为你打开新的学习之门!

如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
程师,想要提升技能,往往是自己摸索成长,自己不成体系的自学效果低效漫长且无助。**

因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

[外链图片转存中…(img-DRIiZJef-1715848231175)]

[外链图片转存中…(img-GgXp9iD8-1715848231175)]

[外链图片转存中…(img-29MHI9wt-1715848231176)]

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,不论你是刚入门Java开发的新手,还是希望在技术上不断提升的资深开发者,这些资料都将为你打开新的学习之门!

如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

  • 4
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值