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

以上为个人经验,希望能给大家一个参考,也希望大家多多支持Devmax。

mybatis调用mysql存储过程并获取返回值方式的更多相关文章

  1. ios – 来自UIAlertController的self.navigationController?.popViewControllerAnimated

    我是新手,但我想我已经掌握了它.这让我的进步很难过.我想要做的是当我们无法找到他的查询的相关数据时向用户抛出错误消息,然后继续将他带回到之前的ViewController.但是,我在这方面遇到了麻烦.在我添加操作的行上,我收到以下错误:’UIViewController?’不是Void的子类型我该怎么做呢?

  2. ios – 如何从Swift中的Closure返回值?

    ).更改实现以使用存储调用值的成员变量.

  3. 从iOS应用程序发送帖子到PHP脚本不工作…简单的解决方案就像

    我之前已经做了好几次了但是由于某些原因我无法通过这个帖子…我尝试了设置为_POST且没有的变量的PHP脚本……当它们未设置为发布时它工作精细.这是我的iOS代码:这里是PHP的一大块,POST变量不在正确的位置?我想这对于更有经验的开发人员来说是一个相当简单的答案,感谢您的帮助!解决方法$_POST是一个数组,而不是一个函数.您需要使用方括号来访问数组索引:

  4. Swift中方法的多面性

    在继续之前,我需要澄清Swift中方法和函数之间的不同,因为在本文中我们将使用这两个术语。按照Apple的SwiftProgrammingLanguageBook里面的方法定义:方法是与某些特定类型相关联的函数。可选类型比Objective-C中的nil指针更加安全也更具表现力,它是Swift许多强大特性的重要组成部分。作为参数的函数在Swift中,函数可以被用来当做变量传递。华丽的返回类型在Swift中,函数的返回类型和返回值相较于Objective-C而言更加复杂,尤其是引入可选和多个返回类型。

  5. Swift函数返回值

    函数的返回值有三种类型:单一返回值,多返回值,无返回值无返回值函数:示例:func函数名{语句}func函数名->(){语句}func函数名->Void{语句}多返回值函数:两种方式实现:1、参数声明为引用类型传递2、将返回定义为元组示例:1、引用类型参数传递funcChangeInt{value1=55value2=1.23}varval1=0varval2=0.0changeInt2、元组类型示例:funcchangeInt()->{return}letvalue=changeInt()println

  6. swift语言学习-8. 函数

    swift中申明函数使用的关键字是func。无参数作为一个函数,肯定是有无参的情况的,即没有参数输入,swift中的函数无参数输入和其他语言一样,留空就好了。()"hello"//调用并打印函数())//输出:hello无返回值swift中参数的返回值的类型是通过->返回值这种形式来书写的,那一个函数没返回值咋搞呢?就是说swift会自动给有默认值的参数,加上一个外部参数名,和它自己的内参名字一样,就像使用了#效果一样,不用你额外写。

  7. Swift教程14-func函数,函数类型_对比Oc

    Swift的函数和函数类型是非常重要的内容.而且Swift中也把函数的形式和方法的形式,定义的完全一致;只不过,函数不是在类中.1.函数的定义func函数名(参数列表)[->返回值类型]{//函数体}解释:func是关键字,是必须写上的前缀,代表它是一个函数或方法;函数名:遵从标识符的规则形参列表,可以为空,也可以很多;例如str:String,a:Int,和声明变量的方法类似->后面跟的是返回值

  8. swift之函数

    Swift的统一的功能语法足够灵活的,可表达任何东西,无论是不带参数名称的简单的样式函数,还是带本地和外部参数名称的复杂的Objective-C样式方法。Swift中的每个函数都有一个类型,包括函数的参数类型和返回类型。为了简化这个函数的主体,可把消息创建和return语句合并成一行:函数的形参和返回值在swift中,函数的形参和返回值是非常具有灵活性的。第二个函数printWithoutCounting,调用的第一个函数,但忽略它的返回值。

  9. swift之Optional Chaining

    自判断链接是一种可以请求和调用属性、方法及子脚本的过程,它的自判断性体现于请求或调用的目标当前可能为空。Residence具有一个Int类型的numberOfRooms,其值为1。强制拆包获得这个人residence属性numberOfRooms属性值,将会引发运行时错误,因为这时没有可以供拆包的residence值。当john.residence不是nil时,会运行通过,且会将roomCount设置为一个int类型的合理值。

  10. Swift语言指南二基础操作符

    Swift支持大多数标准的C操作符并且改善了几项功能以消除常见的编码错误。你可以用Swift的溢出运算符来做溢出操作,详情见《溢出操作符》一节。《高级操作符》一节涵盖了Swift的高级操作符,讲述了如何自定义操作符以及如何实现自定义类型的标准操作符。操作符影响的值称为操作数。不过,在Swift里对负数的操作,严格来说是取余而不是取模。复合赋值操作符像C那样,Swift也提供复合赋值操作符,将复制符(=)和其它操作结合起来。nil合并操作符提供

随机推荐

  1. 基于EJB技术的商务预订系统的开发

    用EJB结构开发的应用程序是可伸缩的、事务型的、多用户安全的。总的来说,EJB是一个组件事务监控的标准服务器端的组件模型。基于EJB技术的系统结构模型EJB结构是一个服务端组件结构,是一个层次性结构,其结构模型如图1所示。图2:商务预订系统的构架EntityBean是为了现实世界的对象建造的模型,这些对象通常是数据库的一些持久记录。

  2. Java利用POI实现导入导出Excel表格

    这篇文章主要为大家详细介绍了Java利用POI实现导入导出Excel表格,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

  3. Mybatis分页插件PageHelper手写实现示例

    这篇文章主要为大家介绍了Mybatis分页插件PageHelper手写实现示例,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

  4. (jsp/html)网页上嵌入播放器(常用播放器代码整理)

    网页上嵌入播放器,只要在HTML上添加以上代码就OK了,下面整理了一些常用的播放器代码,总有一款适合你,感兴趣的朋友可以参考下哈,希望对你有所帮助

  5. Java 阻塞队列BlockingQueue详解

    本文详细介绍了BlockingQueue家庭中的所有成员,包括他们各自的功能以及常见使用场景,通过实例代码介绍了Java 阻塞队列BlockingQueue的相关知识,需要的朋友可以参考下

  6. Java异常Exception详细讲解

    异常就是不正常,比如当我们身体出现了异常我们会根据身体情况选择喝开水、吃药、看病、等 异常处理方法。 java异常处理机制是我们java语言使用异常处理机制为程序提供了错误处理的能力,程序出现的错误,程序可以安全的退出,以保证程序正常的运行等

  7. Java Bean 作用域及它的几种类型介绍

    这篇文章主要介绍了Java Bean作用域及它的几种类型介绍,Spring框架作为一个管理Bean的IoC容器,那么Bean自然是Spring中的重要资源了,那Bean的作用域又是什么,接下来我们一起进入文章详细学习吧

  8. 面试突击之跨域问题的解决方案详解

    跨域问题本质是浏览器的一种保护机制,它的初衷是为了保证用户的安全,防止恶意网站窃取数据。那怎么解决这个问题呢?接下来我们一起来看

  9. Mybatis-Plus接口BaseMapper与Services使用详解

    这篇文章主要为大家介绍了Mybatis-Plus接口BaseMapper与Services使用详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

  10. mybatis-plus雪花算法增强idworker的实现

    今天聊聊在mybatis-plus中引入分布式ID生成框架idworker,进一步增强实现生成分布式唯一ID,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

返回
顶部