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

网友投稿 1563 2022-11-07

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

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

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

一、接收一个返回值

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

创建表

DROP TABLE IF EXISTS `demo`;

CREATE TABLE `demo` (

`id` int(11) NOT NULL AUTO_INCPEPvSgmzyGREMENT,

`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

CALL pro(#{userId,mode=IN},#{userCount,mode=OUT,jdbcType=INTEGER});

service

@Override

public void procedureTest() {

Map param = new HashMap<>();

parPEPvSgmzyGam.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 param = new HashMap<>();

param.put("userId", "1");

List> list = demoMapper.procedureTest(param);

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

System.out.println("输出集合:" + list.size());

}

CALL pro(#{userId,mode=IN},#{userCount_2,mode=OUT,jdbcType=INTEGER});

三、返回多个结果集

四、第二种配置也可以

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},

#{courseNamhttp://e, mode=IN,jdbcType=VARCHAR},

#{classroomName, mode=IN,jdbcType=VARCHAR},

#{approverId, mode=IN,jdbcType=VARCHAR},

#{createBy, mode=IN,jdbcType=VARCHAR},

#{total,mode=OUT ,jdbcType=VARCHAR})

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:JS的作用域保护
下一篇:数字水印学习系统
相关文章

 发表评论

暂时没有评论,来抢沙发吧~