MySQL中存储过程的简单使用案例

SpringBoot实战——详解JdbcTemplate操作存储过程 对于一些复杂的业务逻辑,使用存储过程可以提高数据库操作的效率和安全性。本文将详细介绍如何在SpringBoot项目中使用 JdbcTemplate 工具操作存储过程,方便地与数据库进行交互,调用存储过程。 阅读详情

一、存储过程简介

1.1 什么是存储过程

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

存储过程是为了完成特定功能的一组SQL语句集合,包含数据类型、流程控制、输入和输出和它自己的函数库,编译后保存在数据库中,用户可随时调用它。

1.2 为什么要用存储过程

存储过程将sql处理操作封装在一个简单的处理单元中,存储数据库中,便于反复调用,在一定程度上能增加数据的处理效率,同时能防止表结构暴露,预防sql注入。在银行等金融行业,数据安全性高,程序逻辑变动少,常常使用存储过程来进行一部分业务逻辑处理;但在互联网行业,需求变化频繁,可扩展性要求高,系统移植概率高,往往少使用存储过程。

1.2.1 存储过程的优点

  • 存储过程一次编译后,存储在数据库中,后续调用不需要再编译,执行速度快。

  • 存储过程是在数据库内部进行数据处理,相较于外部程序调用接口(如Java 程序的 JDBC 接口)访问数据库内部数据,性能更优。

1.2.2 存储过程的缺点

  • 存储过程依赖于数据库,例如Oracle的存储过程和MySQL的存储过程语法存在差异。若需要从Oracle迁移到MySQL,带来的改造量将是巨大的,这也是部分架构人员不推荐使用存储过程的原因。
  • 存储过程将处理逻辑和数据库绑定,不利于系统解耦。
  • 存储过程代码管理困难,不利于团队协作开发;当数据库表变化时,可能会影响存储过程。

二、Spring+MySQL调用存储过程

本节将使用SpringBoot+MySQL项目,演示存储过程的使用方法。

2.1 项目目标

搭建一个基于SpringBoot的web系统,在浏览器发送请求后,java代码通过mybatis执行存储过程,将表MYTEST中的数据拷贝到MYTEST_TEMP。

2.2 创建表及测试数据

(一)、建表MYTEST :

CREATE TABLE IF NOT EXISTS `MYTEST`(
   `id` INT UNSIGNED AUTO_INCREMENT,
   `title` VARCHAR(100) NOT NULL,
   `author` VARCHAR(40) NOT NULL,
   `submission_date` DATE,
   PRIMARY KEY ( `id` )
)ENGINE=InnoDB DEFAULT CHARSET=utf8;

(二)、创建表MYTEST_TEMP

CREATE TABLE IF NOT EXISTS `MYTEST_TEMP`(
   `id` INT UNSIGNED AUTO_INCREMENT,
   `author` VARCHAR(40) NOT NULL,
   `submission_date` DATE,
    `execute_date` DATE,
   PRIMARY KEY ( `id` )
)ENGINE=InnoDB DEFAULT CHARSET=utf8;

(三)、在表MYTEST中插入数据

INSERT INTO MYTEST(title,author,submission_date)
VALUES ('任务-1','展示','2017-01-02'),
       ('任务-2','张二','2017-01-02'),
       ('任务-3','张三','2022-03-24'),
       ('任务-4','张四','2022-03-24'),
       ('任务-5','张五','2022-03-24');
       

(四)、编写存储过程

在Navicat中创建存储过程的方式请参考:Navicat创建存储过程方法

创建名为TEST的存储过程,入参为execDate。

CREATE DEFINER=`root`@`%` PROCEDURE `TEST`(
  IN execDate  VARCHAR(8)
)
BEGIN

# 清空表
TRUNCATE TABLE MYTEST_TEMP; 

INSERT INTO MYTEST_TEMP 
(
id,
author,
submission_date,
execute_date
)
SELECT 
id,author,submission_date,DATE_FORMAT(NOW(),'%Y-%m-%d 23:59:59') AS execute_date
FROM MYTEST
WHERE submission_date = execDate;
COMMIT;

END

2.3 编写Springboot代码

(一)、Controller层

创建HelloController类

@RestController
public class HelloController {

    @Autowired
    private ProcedureService procedureService;


    @RequestMapping("hello")
    public String hello(){

        procedureService.copyData("20220324");

        return  "hello world!";
    }    
}

(二)、Service层

创建ProcedureService接口

public interface ProcedureService {

    public void copyData(String date);
}

创建实现类

@Service
public class ProcedureServiceImpl  implements ProcedureService{


    @Autowired
    private ProcedureDao procedureDao;

    @Override
    public void copyData(String date){
        procedureDao.copyData(date);
    }
}

(三)、Dao层

创建ProcedureDao接口

public interface ProcedureDao {

    public void copyData(String date);
}

(四)、mapper.xml

创建mapper映射文件

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="com.example.demo.dao.ProcedureDao">
    
    <update id="copyData" parameterType="java.lang.String"   statementType="CALLABLE">
      CALL TEST(#{execDate,mode=IN,jdbcType=VARCHAR})
    </update>
</mapper>

2.4 查看执行结果

在浏览器中请求http://localhost:8080/hello,查看运行结果,最后可以看到,MYTEST表中数据已导入到MYTEST_TEMP中。

在这里插入图片描述

三、存储过程语法介绍

存储过程分为存储过程声明、执行过程、异常处理部分(可选)。

3.1 MySQL存储过程参数介绍

MySQL的存储过程的参数分为三类:IN、OUT、INOUT。

  • IN 默认参数类型,代表入参
  • OUT 出参,可将结果传会给调用的程序
  • INOUT 即是入参也是出参

常用实例

  • 声明无参的存储过程
CREATE DEFINER = CURRENT_USER PROCEDURE `test`()  # 声明名称为test的存储过程
BEGIN
   # 存储过程执行部分
	#Routine body goes here...

END;
  • 声明入参为字符的存储过程
CREATE DEFINER=`root`@`%` PROCEDURE `TEST`(
  IN execDate  VARCHAR(8)
)
BEGIN
# 执行过程,它是业务逻辑处理部分
END
  • 调用存储过程
# call 存储过程名称
call procedure_name()
  • 删除存储过程
drop procedure name

四、参考文档

1、Navicat创建存储过程方法

2、存储过程使用方法介绍

3、MySQL中的存储过程

4、存储过程的适用环境探讨

基于springboot+mybatis调用MySQL存储过程 springboot、mybatis调用mysql存储过程,进行简单数据查询 阅读详情

相关推荐

Springboot Mybatis 、JPA 调用存储过程,实战教程

mybatis 、JPA 调用存储过程

默默不代表沉默 3933

SpringBoot调用存储过程

程序中需要直接调用存储过程的场景 第一种:返回带参数的存储过程 第二种:返回结果集 第三种:第一种+第二种(不讨论) 数据库环境准备 数据库:MySQL 创建表及数据 CREATE TABLE `order` ( `uuid` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL, `number` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NOT

Clare Tung 1万+

C语言由scanf(“%d“,)非法输入字符造成的死循环及其解决方案

声明:此文章仅作为C语言学习历程中的思路整理,用于解决入门阶段较为浅显的问题,如有错误还请指正。 现象描述: 代码要求实现用户输入1或2,通过scanf("%d",&a)读取这个值,从而判断分属于1或2的两种情况。输入非1,2的数字都应该返回"Invalid Number!",并且要求重新输入数字。 while(a!=1&&a!=2) { printf("Invalid Number!\n"); printf("Enter the number:"); scan

weixin_49764077的博客 8719

springboot + mybatis 使用MySQL存储过程 操作数据的添加与删除

一、什么是mysql存储过程 存储过程(Stored Procedure)是一种在数据库中存储复杂程序,以便外部程序调用的一种数据库对象。存储过程是为了完成特定功能的SQL语句集,经编译创建并保存在数据库中,用户可通过指定存储过程的名字并给定参数(需要时)来调用执行。MySQL 5.0 版本开始支持存储过程。 直白点就是,本该在service层完成的逻辑操作,直接放到数据库内完成了。 好处:减少了与数据进行连接完成操作的过程,提高了执行效率 缺点:增加了数据库的负担,且移植性较差 二、存储...

怪老四的博客 3041

神经网络:初学者指南(专业版)

神经网络是一种受生物大脑启发的计算模型,由多层互连的人工神经元组成。本文从生物神经元结构出发,介绍了感知器模型、激活函数、网络架构(输入/隐藏/输出层)等基础概念,并详细阐述了前向传播、反向传播、损失函数和优化器等核心训练机制。同时涵盖了CNN、RNN等常见架构,以及过拟合、梯度消失等关键挑战,最后概述了神经网络在计算机视觉、NLP等领域的广泛应用。全文系统性地梳理了神经网络的基础理论和实践要点,为初学者提供了清晰的学习路径。

weixin_42107409的博客 1782

深度解析NXP AMCLIB状态观测器:PMSM无感FOC控制实战指南

状态观测器是现代电机控制中的核心算法,它基于电机数学模型,通过测量定子电压和电流,实时估算出转子的位置和速度,从而替代了传统的物理传感器。其原理遵循“预测-校正”的闭环结构,通过比较模型预测值与实际采样值的误差,不断修正内部状态估计。这项技术的核心价值在于实现了无传感器控制,显著降低了系统成本、提升了可靠性与紧凑性,广泛应用于伺服驱动、变频器、电动汽车和家电等领域。本文聚焦于NXP AMCLIB库中的角度跟踪观测器和反电动势观测器,深入剖析其设计思路、固定点运算实现以及参数整定方法,为工程师在永磁同步电机无

cumi7754的博客 2829

MySQL 存储过程案例实战

MySQL 存储过程案例实战 关注微信公众号 DevXTalk ...

黑帽子技术的博客 719

SRAM vs RRAM:存算一体芯片选型指南(含最新技术对比)

本文深入对比了SRAM与RRAM在存算一体芯片设计中的核心差异,为硬件工程师和架构师提供实战选型指南。文章从技术本质、性能、功耗、成本及设计风险等多维度剖析,指出SRAM基于成熟CMOS工艺,适合高精度、低延迟场景;而RRAM凭借非易失性和高密度潜力,在超低功耗、固定模型应用中优势明显。决策需综合项目预算、上市时间及技术储备。

e4f5g6h的博客 939

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

本文从基础到高级再到实战,由浅入深,把MySQL讲的清清楚楚,明明白白,这应该是我目前为止看到过最好的有关MySQL的学习笔记了,我相信如果你把这份笔记认真看完后,无论是工作中碰到的问题还是被面试官问到的问题都能迎刃而解!加入社区:https://bbs.youkuaiyun.com/forums/4304bb5a486d4c3ab8389e65ecb71ac0/**Mapper 接口。

2401_86400220的博客 1356

AI 生成测试报告:从 2 小时到 10 分钟

本文分享了AI在汽车电子测试报告生成中的应用案例。作者以某车企ECU测试项目为例,对比传统报告方式(每天2小时)与AI辅助方式(每天20分钟),效率提升83%。文章详细介绍了测试报告的核心要素(测试概况、结果、问题分析、发布建议)和不同类型报告(日报、周报、总结报告)的特点,并提供了从CANoe导出测试数据的Python解析脚本示例。通过AI自动化处理,大幅减少了测试工程师在报告整理上的时间投入,为汽车电子测试工作提供了实用效率提升方案。

小明的博客 443

Android Camera MTK框架

Camera简介: 虽然前文说道Android在5.0之后就推出了Camera2 API,但是各个厂家的基本未适配,导致目前市场上大部分机型使用的仍然是Camera1 API。PS:Android 9.0 Google强制要求各个平台厂商(高通/MTK/华为等)支持Camera2,不再兼容Camera1。 ...

weixin_49303682的博客 5507

MySQL存储过程详解与案例应用

​存储过程(Stored Procedure)是在大型数据库系统中,一组为了完成特定功能的SQL 语句集,它存储在数据库中,一次编译后永久有效,用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来执行它。存储过程是数据库中的一个重要对象。在数据量特别庞大的情况下利用存储过程能达到倍速的效率提升。MySQL 5.0开始支持存储过程,这样即可以大大提高数据库的处理速度,同时也可以提高数据库编程的灵活性。

创作不易,请多支持,将为本站提供更多「有价值的文章」。 2211

cilium native-routing模式流程分析

本文分析cilium native routing模式下的报文路径和涉及到的ebpf源码分析。实验环境在vxlan模式下修改参数后而来。native routing和vxlan模式的区别主要是跨节点通信时,vxlan模式需要封装,native routing模式需要根据目的ip查找路由表转发到其他节点。

fengcai_ke的博客 988

mysql存储过程中in、out、inout参数使用实际案例

1.参数in的使用(代表输入,意思说你的参数要传到存过过程的过程里面去) //为了避免存储过程中分号(";")结束语句,我们使用分隔符告诉mysql解释器,该段命令是否已经结束了。 /** 案例功能:求1-n的和 开发者:徐守威 时间:2016-08-13 */ delimiter $ create procedure p1(in n int) begin declare to

徐守威 2万+

手把手教你RK3568 MIPI屏驱动适配,纯干货!

RK3568 作为一款高性能的多媒体处理器,在嵌入式领域中备受瞩目。它采用了先进的 22nm 制程工艺,搭载四核 Cortex-A55 处理器,这种架构为芯片提供了高效的功耗比,使其在运行各种复杂任务时,既能保证性能,又能有效控制功耗。在实际应用中,无论是多任务处理还是运行大型应用程序,RK3568 都能凭借其四核 Cortex-A55 处理器,实现流畅的操作体验,满足智能设备对高性能和低功耗的需求。

远程部署调试 运行安装 项目调试 二次开发 项目技术新 持续迭代 部分源码免费分享 4069

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

【存储过程】Mysql的存储过程,语法及案例(详解)

优点代码复用性:存储过程可以将常用的SQL操作封装起来,在不同的应用程序或SQL脚本中重复调用。这避免了重复编写相同的SQL代码,提高了开发效率,也便于对业务逻辑进行统一管理和维护。提高性能:存储过程在创建时会进行编译和优化,存储在数据库服务器中。当调用存储过程时,数据库可以直接执行已编译好的代码,无需再次解析和优化SQL语句,这大大减少了数据库的处理时间,提高了执行效率。特别是对于复杂的查询和操作,性能提升更为明显。减少网络传输。

A的博客 1743

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

mysql 存储过程 实例_mysql存储过程案例解析

mysql的存储过程案例解析DROP PROCEDURE IF EXISTS `P_CreateID`;DELIMITER $$CREATE DEFINER=`root`@`localhost` PROCEDURE `P_CreateID`(in tablenames VARCHAR(50) ,out BH VARCHAR(40))BEGINdeclare _time int;DECLARE _...

weixin_42552410的博客 370

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

mysql存储过程案例

五、创建存储过程或函数实现传入女神名称,返回:女神 and 男神 格式的字符串。SET @result = ''$ #注意:用户变量要求声明时必须初始化。CALL test_pro1('建宁公主', '666888')$CALL test_pro1('双儿', '666888');CALL test_pro5('范冰冰', @result)$CALL test_pro5('黄圣依', @res)$CALL test_pro5('小昭', @res)$SELECT @result AS 结果$

Zero的博客 488

MySQL,存储过程简单案例

  本篇文章未完待续中......   1、下面的案例包含 Mysql数据中存储过程的创建、 存储过程的删除、 执行存储过程。 需要说明的是,存储过程创建成功后,需要 执行存储过程 ,才可对数据库表中的相关数据进行CRUD操作。   -- 创建存储过程 CREATE PROCEDURE proc_tab_resource_age() BEGIN DECLARE i INT DEF...

dear_Alice_moon的专栏 362

MySQL——事务与存储过程(四)综合案例——存储过程应用

MySQL——事务与存储过程(四)综合案例——存储过程应用

致力于分享在各类技术领域的学习与实践经验,涵盖编程、虚拟化、开源工具、网络安全等。 1321

mysql的存储过程介绍、创建、案例、删除、查看

存储过程 含义: 一组预先编译好的sql语句的集合,理解成批处理语句 好处: 1、提高代码的重用性 2、简化操作 3、减少了编译次数并且减少了和数据库服务器的连接次数,提高了效率 一、创建语法 create procedure 存储过程的名字(参数列表) BEGIN 存储过程体(一组合法有效的sql语句) END 注意: 1.参数列表包含三部分 参数模式 参数名 参数类型 举例:...

weixin_42193489的博客 793

mysql存储过程实例_mysql存储过程案例讲解

一、创建存储过程实现传入用户名和密码,插入到admin表中CREATE PROCEDURE test_pro1(IN username VARCHAR(20),IN loginPwd VARCHAR(20))BEGININSERT INTO admin(admin.username,PASSWORD)VALUES(username,loginpwd);END $二、创建存储过程实现传入女神编号,返...

weixin_33419842的博客 258

Mysql 存储过程 简单案例

1.in单条件查询存储过程 CREATE PROCEDURE `sp1`(IN `t1parm` varchar(50)) BEGIN Select * from test1 where t1=t1parm; END call sp1('1874') set @num = '1874'; call sp1(@num); 注意 参数必须有@,否则Unknown system variable 'num' 2.out返回值存储过程 CREATE PROCE...

陈熙之的博客 532
上一篇: Spring中多语言页面适配方案总结
下一篇: 单体架构、集群架构和分布式架构概述
JoyousHorse
博客等级 码龄11年 33粉丝 15原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值