mybatis怎么调用mysql存储过程并获取返回值

mybatis调用mysql存储过程并获取返回值1、mysql创建存储过程#结束符号默认;
, delimiter $$语句表示结束符号变更为$$
delimiter $$
CREATE PROCEDURE `demo`(IN inStr VARCHAR(100), out ourStr VARCHAR(4000))
BEGIN

SET ourStr = '
01'
;

if (inStr == '
02'
) then
set ourStr = '
02'
;

end if;


END$$
#结束符号修改
delimiter ;
2、mybatis调用

(1)注解方式

// key1和key2都是参数map中的key
// key1是需要传入存储过程的值
// key2是用于接收存储过程返回的值,跟获取自增主键类似
@Select("
call demo('
${key1}'
, #{key2, mode=OUT, jdbcType=VARCHAR})"
)
@Options(statementType = StatementType.CALLABLE)
String getDemoValue(Map<
String, Object>
map);

(2)xml方式

<
select id="
getDemoValue"
resultType="
java.lang.String"
parameterType="
java.util.Map"
statementType="
CALLABLE"
>

call demo('
${key1}'
, #{key2, mode=OUT, jdbcType=VARCHAR})
<
/select>
mybatis调存储过程遇到返回值null的坑mybatis调存储过程时返回值null

就简单的一个存储过程

BEGIN
#SELECT COUNT(*) scount FROM test_user t WHERE t.user_sex=sex;

SELECT user_name userName FROM test_user t WHERE t.user_sex=sex;

END

Mybatis如何调用MySQL存储过程并获取返回值

然后在Mybatis Mapper配置文件中

<
!--存储过程 输入参数用Map -->

<
select id="
queryCountBySexWithProcedure"
statementType="
CALLABLE"
parameterType="
java.util.Map"
resultType="
java.util.HashMap"
>

{
CALL queryCountBySexWithProcedure(
#{sex,jdbcType=VARCHAR,mode=IN},
#{userName,jdbcType=VARCHAR,mode=OUT}
)
}
<
/select>

然后userName值null,这是为什么呢?在mapper.xml文件会做映射处理,而在存储过程中下方标红的属性 user_name并不会自动映射到userName 值中,所以调用userName值一定返回null。

BEGIN
#SELECT COUNT(*) scount FROM test_user t WHERE t.user_sex=sex;

SELECT user_name userName FROM test_user t WHERE t.user_sex=sex;

END

那怎么处理这样问题呢?那就是加上INTO 关键字

BEGIN
#SELECT COUNT(*) scount FROM test_user t WHERE t.user_sex=sex;

SELECT user_name INTO userName FROM test_user t WHERE t.user_sex=sex;

END

一、Mybatis调用MySQL存储过程的基本介绍
Mybatis是一个ORM框架,它本身并不提供直接的支持调用存储过程的功能。但是,Mybatis提供了一个非常方便的机制,可以调用存储过程并获取返回值。本文将介绍如何在Mybatis中调用MySQL存储过程,并获取其返回值。
二、创建MySQL存储过程
在开始调用MySQL存储过程之前,需要先创建一个存储过程。以下是一个简单的示例,该存储过程接受一个输入参数,然后返回一个输出参数。
DELIMITER //
CREATE PROCEDURE simple_proc(IN in_param INT, OUT out_param INT)
BEGIN
SET out_param = in_param + 1;
END //
DELIMITER ;
三、在Mybatis中调用MySQL存储过程
在Mybatis中调用MySQL存储过程非常简单。只需要在mapper文件中定义一个
{call simple_proc(#{inParam, mode=IN, jdbcType=INTEGER}, #{outParam, mode=OUT, jdbcType=INTEGER})}

需要注意的是,在元素中,需要使用#{param}来引用存储过程的参数。也可以指定参数的类型、输入/输出模式和JDBC类型。
四、获取MySQL存储过程的返回值
在Mybatis中调用存储过程后,需要获取其返回值。为了方便起见,我们可以将存储过程的返回值定义为一个resultMap元素。以下是一个简单的示例,展示了如何获取上面创建的存储过程的返回值。



需要使用到的是元素和元素,它们可以将存储过程的返回值映射到Java对象的属性上。
在mapper文件中使用resultMap元素来引用这个返回值。以下是一个简单的示例,展示了如何在mapper文件中引用上面定义的resultMap元素。

总结
Mybatis支持调用MySQL存储过程,并且提供了非常方便的机制来获取存储过程返回的结果。通过在mapper文件中定义