mybatis调用mysql存储过程(返回参数,单结果集,多结果集)

目录
  • 一、接收一个返回值
    • 注意事项:
    • 存储过程主要分成三类:
  • 二、接收list结果集
  • 三、返回多个结果集
  • 四、第二种配置也可以

一、接收一个返回值

使用Map接收返回参数,output参数放在传入的param中

创建表

DROP TABLE IF EXISTS `demo`;
CREATE TABLE `demo` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(255) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=32 DEFAULT CHARSET=utf8;

-- ----------------------------
-- Records of demo
-- ----------------------------
INSERT INTO `demo` VALUES ('1', '测试');

创建存储过程

DROP PROCEDURE IF EXISTS pro;
CREATE PROCEDURE pro (
	IN userId INT,
	OUT userCount INT
)
BEGIN

DECLARE user_name VARCHAR (64);
SELECT NAME FROM demo WHERE id = userId INTO user_name;
INSERT INTO demo (NAME) VALUES (user_name);
SELECT COUNT(*) FROM demo INTO userCount;

END;

mapper.xml

<select id="procedureTest" parameterMap="pm" statementType="CALLABLE">
        CALL pro(#{userId,mode=IN},#{userCount,mode=OUT,jdbcType=INTEGER});
    </select>

    <parameterMap id="pm" type="java.util.Map">
        <parameter property="userId" jdbcType="INTEGER" mode="IN"></parameter>
        <parameter property="userCount" jdbcType="INTEGER" mode="OUT"></parameter>
    </parameterMap>

service

@Override
    public void procedureTest() {
        Map<String, Object> param = new HashMap<>();
        param.put("userId", "1");
        demoMapper.procedureTest(param);
        System.out.println("输出结果是:"+param.get("userCount"));
    }

输出结果

参数名不一定和存储过程一样,只和传参顺有关,使用下图配置同样可以获取结果

System.out.println("输出结果是:"+param.get("userCount_2"));

注意事项:

1、  存储过程的参数和名称无关,只和顺序有关系

2、  存储过程的output参数,只能通过传入的map获取

3、  存储过程返回的结果集可直接用返回的map接收

4、  存储过程的return结果需要使用?=call procName(?,?)的第一个参数接收,需要指定对应的mode为OUT类型

5、  存储过程对应的数据类型为枚举类型,需要使用大写,如VARCHAR

output是在存储过程中的参数的返回值(输出参数),而ReturnValue是存储过程返回的值(使用return关键字),一个存储过程可以有任意多个依靠参数返回的值,但只有一个ReturnValue。

存储过程主要分成三类:

1、返回记录集的存储过程:执行结果是一个记录集,例如,从数据库中检索出符合某一个或几个条件的记录。

2、返回数值得的存储过程(也可称为标量存储过程),其执行完后返回一个值,例如数据库中执行一个有返回值的函数或命令。

3、行为存储过程,用来实现数据库的某个功能,而没有返回值,例如在数据库中的更新和删除操作。

二、接收list结果集

使用list接收

@Override
    public void procedureTest() {
        Map<String, Object> param = new HashMap<>();
        param.put("userId", "1");
        List<?> list = demoMapper.procedureTest(param);
        System.out.println("输出结果是:" + param.get("userCount_2"));
        System.out.println("输出集合:" + list.size());
    }
 <select id="procedureTest" parameterMap="pm" statementType="CALLABLE" resultMap="rm">
        CALL pro(#{userId,mode=IN},#{userCount_2,mode=OUT,jdbcType=INTEGER});
    </select>

    <parameterMap id="pm" type="java.util.Map">
        <parameter property="userId" jdbcType="INTEGER" mode="IN"></parameter>
        <parameter property="userCount_2" jdbcType="INTEGER" mode="OUT"></parameter>
    </parameterMap>

    <resultMap id="rm" type="com.csstj.srm.entity.procedureTestEntity">
        <result column="id" property="id"></result>
        <result column="name" property="userName"></result>
    </resultMap>

三、返回多个结果集

四、第二种配置也可以

CALL s_generatePlan_new (
#{organizationId, mode=IN,jdbcType=VARCHAR},
#{gradeId, mode=IN,jdbcType=VARCHAR},
#{semesterId, mode=IN,jdbcType=VARCHAR},
#{className, mode=IN,jdbcType=VARCHAR},
#{employeeCode, mode=IN,jdbcType=VARCHAR},
#{courseName, mode=IN,jdbcType=VARCHAR},
#{classroomName, mode=IN,jdbcType=VARCHAR},
#{approverId, mode=IN,jdbcType=VARCHAR},
#{createBy, mode=IN,jdbcType=VARCHAR},
#{total,mode=OUT ,jdbcType=VARCHAR})

到此这篇关于mybatis调用mysql存储过程(返回参数,单结果集,多结果集)的文章就介绍到这了,更多相关mybatis调用mysql存储过程内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • Mybatis调用MySQL存储过程的简单实现

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

  • 关于Mybatis 中使用Mysql存储过程的方法

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

  • Mybatis应用mysql存储过程查询数据实例

    1.创建mysql存储过程,这是个复杂查询加上了判断,比较复杂 CREATE PROCEDURE searchAllList ( IN tradingAreaId VARCHAR (50), IN categoryName VARCHAR (100), IN intelligenceSort TINYINT UNSIGNED, IN priceBegin DOUBLE, IN priceEnd DOUBLE, IN commodityName VARCHAR (200), IN flag TIN

  • mybatis调用mysql存储过程(返回参数,单结果集,多结果集)

    目录 一.接收一个返回值 注意事项: 存储过程主要分成三类: 二.接收list结果集 三.返回多个结果集 四.第二种配置也可以 一.接收一个返回值 使用Map接收返回参数,output参数放在传入的param中 创建表 DROP TABLE IF EXISTS `demo`; CREATE TABLE `demo` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(255) DEFAULT NULL, PRIMARY KEY (`id`

  • 前端传参数进行Mybatis调用mysql存储过程执行返回值详解

    目录 查询数据库中的存储过程: 方法一: select `name` from mysql.proc where db = 'your_db_name' and `type`; = 'PROCEDURE' 方法二:  show procedure status; 你要先在数据库中建一个表,然后创建存储过程 我建的表a_tmp,存储过程名称bill_a_forbusiness 执行语句:  CALL bill_a_forbusiness(44,44,52,47,44,46,52,52,349171

  • mybatis调用mysql存储过程并获取返回值方式

    目录 mybatis调用mysql存储过程并获取返回值 1.mysql创建存储过程 2.mybatis调用 mybatis调存储过程遇到返回值null的坑 mybatis调存储过程时返回值null mybatis调用mysql存储过程并获取返回值 1.mysql创建存储过程 #结束符号默认;, delimiter $$语句表示结束符号变更为$$ delimiter $$ CREATE PROCEDURE `demo`(IN inStr VARCHAR(100), out ourStr VARCH

  • mybatis调用sqlserver存储过程返回结果集的方法

    第一种:返回值通过out输出 sqlserver存储 testMapper.xml 两种都能接收到数据的, 因为我的实体类字段与数据库的不一致,上面图片是按照数据库字段定义的,下图是按照实体类定义的,接收输出参数是按照你定义的名称返回 serviceImpl Map<String,String> objectsMap = new HashMap<>(); objectsMap.put("sno","123"); objectsMap.put(

  • Java调用MySQL存储过程并获得返回值的方法

    本文实例讲述了Java调用MySQL存储过程并获得返回值的方法.分享给大家供大家参考.具体如下: private void empsInDept(Connection myConnect, int deptId) throws SQLException { CallableStatement cStmt = myConnect.prepareCall("{CALL sp_emps_in_dept(?)}"); cStmt.setInt(1, deptId); cStmt.execute

  • Python简单调用MySQL存储过程并获得返回值的方法

    本文实例讲述了Python调用MySQL存储过程并获得返回值的方法.分享给大家供大家参考.具体实现方法如下: try: conn = MySQLdb.connect ( host = 'localhost', user = 'root', passwd = 'pass', db = 'prod', port = 3306 ) cursor1=conn.cursor() cursor1.execute("CALL error_test_proc()") cursor1.close() e

  • VB.NET调用MySQL存储过程并获得返回值的方法

    本文实例讲述了VB.NET调用MySQL存储过程并获得返回值的方法.分享给大家供大家参考.具体实现方法如下: Dim myConnectionString As String = "Database=" & myDatabase & _ " ;Data Source=" & myHost & _ ";User Id=" & myUserId & ";Password=" &

  • mybatis 调用 Oracle 存储过程并接受返回值的示例代码

    目录 存储过程 mapper.xml dao层 调用 存储过程 PROCEDURE P_TEST_MYBATIS(iv_ins1 IN VARCHAR2, --id iv_ins2 IN VARCHAR2, --no ov_res OUT number --提示信息 ) IS BEGIN ov_res := 0; select count(1) into ov_res from jc_zhiydoc t where t.zhiy_id = iv_ins1 and t.zhiy_no = iv_i

  • mysql存储过程 返回 list结果集方式

    目录 mysql存储过程 返回 list结果集 思路 mysql存储过程和存储函数练习 存储过程和存储函数语法 存储函数 案例演示 mysql存储过程 返回 list结果集 思路 直接链接多个表返回结果集即可,先写成普通的sql调整好,不要输入参数,再写成存储过程, 不要用游标,否则会把你慢哭的 BEGIN DECLARE In_StartTime VARCHAR(64); DECLARE In_StopTime VARCHAR(64); DECLARE IN_User_id VARCHAR(6

随机推荐