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

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

(0)

相关推荐

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

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

  • 前端传参数进行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存储过程(返回参数,单结果集,多结果集)

    目录 一.接收一个返回值 注意事项: 存储过程主要分成三类: 二.接收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存储过程并获取返回值方式

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

  • 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

  • android webview中使用Java调用JavaScript方法并获取返回值

    在android平板上用webview打开一个网页,调用里面的javascript方法,同时相互传参. 网上例子很少啊,基本都不能获取返回值,贴一个自己最后调试完的代码如下: Java: 复制代码 代码如下: protected void onCreate(Bundle savedInstanceState) { ........ x = (WebView)this.findViewById(R.id.webView_viewTable); x.setScrollBarStyle(View.SC

  • 关于mybatis调用存储过程获取返回值问题

    总体思路:map传值 controller: Map<String,Object> m=new HashMap<String,Object>(); m.put("name", 'zs'); m.put("password", '55555'); cardservice.bindCard(m); JSONObject json=new JSONObject(); //获得返回值 json.put("msg", m.get(&

随机推荐