Mysql的存储过程,Mybatis对存储过程的调用

本文介绍了MySQL的存储过程,包括存储过程的概念、创建过程,并详细讲解了MyBatis如何调用存储过程,提供了示例代码进行说明。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

mysql存储过程

1.存储过程简介

我们常用的操作数据库语言SQL语句在执行的时候需要要先编译,然后执行,而存储过程(Stored Procedure)是一组为了完成特定功能的SQL语句集,经编译后存储在数据库中,用户通过指定存储过程的名字并给定参数(如果该存储过程带有参数)来调用执行它。
一个存储过程是一个可编程的函数,它在数据库中创建并保存。它可以有SQL语句和一些特殊的控制结构组成。当希望在不同的应用程序或平台上执行相同的函数,或者封装特定功能时,存储过程是非常有用的。数据库中的存储过程可以看做是对编程中面向对象方法的模拟。它允许控制数据的访问方式。

2.mysql存储过程的创建

格式:CREATE PROCEDURE 过程名 ([过程参数[,...]])[特性 ...] 过程体

Simple1:

CREATE PROCEDURE pro(in  s INT)
  SELECT name  FROM info WHERE id=s

存储过程根据需要可能会有输入、输出、输入输出参数,这里有一个输入参数s,类型是int型,如果有多个参数用”,”分割开。

直接在sql中调用:
CALL pro(1)

输出结果:
这里写图片描述

Simple2:

CREATE PROCEDURE pro2(in s INT)
  SELECT name,id FROM info WHERE uid=s

同理,输出结果:
这里写图片描述
存储过程的创建语句还有很多,这里不一一列举。

Simple3:

DROP PROCEDURE IF EXISTS icekredit_support.role_update;
CREATE DEFINER =`xuhua`@`%` PROCEDURE `role_update`(
  IN  user_id_int       INT,
  IN  role_id_int       INT,
  IN  role_name_str     VARCHAR(20),
  IN  department_id_str VARCHAR(20),
  IN  remark_str        VARCHAR(100)
)
  BEGIN
    DECLARE success VARCHAR(20);
    IF (SELECT create_person
        FROM role
        WHERE role_id = role_id_int) = user_id_int
    THEN
      UPDATE role
      SET role_name = role_name_str, department_id = department_id_str, remark = remark_str;
      SET success = 'update_success';
    ELSE SET success = 'role_error';
    END IF;
    SELECT success;
  END;

3.mybatis对存储过程的调用

对于simple1这样简单的输入输出,
调用如下:
<select id="getName" statementType="CALLABLE" parameterType="java.lang.Integer" resultType="java.lang.Integer">
        <![CDATA[
            {call pro (
            #{id,mode=IN,jdbcType=INTEGER})}

        ]]>
    </select>

对于simple2这样有很多输出项的,需要构造一个resultMap,这里我是用一个hashmap来存返回的数据

<resultMap type="java.util.HashMap" id="resultMap">
        <result column="id" property="id" javaType="java.lang.Integer" jdbcType="INTEGER"/>
        <result column="name" property="name" javaType="java.lang.String" jdbcType="VARCHAR"/>
    </resultMap>
<select id="getName" statementType="CALLABLE" parameterType="java.lang.Integer" resultMap="resultMap">
        <![CDATA[
            {call pro2 (
            #{id,mode=IN,jdbcType=INTEGER})}

        ]]>
    </select>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值