最近,有个开发提了个需求,希望中间件支持调用mysql存储过程时支持多结果集返回,因为某些原因我们使用了不少的存储过程,很多复杂的逻辑目前来看交互非常的多,所以从当前的现状来说,这个需求还是蛮合理的。中午抽空特地搜了下,整合完整示例如下:

1、创建测试存储过程

delimiter $$
CREATE PROCEDURE sp_multi_resultset(IN p_operator_company_no int,
IN p_operator_no int,
OUT p_error_code varchar(32),
OUT p_error_info varchar(255))
BEGIN
select 1 as col1,2 as col2;
select 11 as col11,22 as col21;
end $$ delimiter ; call sp_multi_resultset(1,1,@error_code,@error_info);

2、mapper文件

<?xml version="1.0" encoding="UTF-8"?> 

<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="MultiResultset">
<resultMap type="test.Test" id="test1">
<result column="col1" property="col1" jdbcType="INTEGER" javaType="Integer" />
<result column="col2" property="col2" jdbcType="INTEGER" javaType="Integer" />
</resultMap> <resultMap type="test.Test2" id="test2">
<result column="col1" property="col1" jdbcType="INTEGER" javaType="Integer" />
<result column="col3" property="col3" jdbcType="INTEGER" javaType="Integer" />
</resultMap> <select id="getTests" statementType="CALLABLE" parameterType="Map" resultMap="test1,test2" >
{call sp_multi_resultset(#{param1,mode=IN,jdbcType=INTEGER},#{param2,mode=IN,jdbcType=INTEGER},#{errorCode,mode=OUT,jdbcType=VARCHAR},#{errorInfo,mode=OUT,jdbcType=VARCHAR})}
</select>
</mapper>

3、java代码

/**
*
*/
package com.medsoft.top10.dao; import java.util.HashMap;
import java.util.List;
import java.util.Map; import org.mybatis.spring.SqlSessionTemplate;
import org.springframework.beans.factory.InitializingBean;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import com.cyl.kernel.util.JsonUtils; /**
* @author zhjh256@163.com
* {@link} http://www.cnblogs.com/zhjh256
*/
@Service
public class TestMultiResultSet implements InitializingBean {
@Autowired
private SqlSessionTemplate sqlSession;
/* (non-Javadoc)
* @see org.springframework.beans.factory.InitializingBean#afterPropertiesSet()
*/
@Override
public void afterPropertiesSet() throws Exception {
Map<String,String> map = new HashMap<String,String>();
map.put("param1", "1");
map.put("param2", "1");
map.put("errorCode", "");
map.put("errorInfo", "");
List<List<?>> multiResult = sqlSession.selectList("MultiResultset.getTests",map);
System.out.println(JsonUtils.toJson(multiResult.get(0)));
System.out.println(JsonUtils.toJson(multiResult.get(1)));
}
}

输出:

[{"col1":1,"col2":2}]
[{"col1":1,"col3":2}]

昨天测试的时候,漏掉了property="colX"导致返回的是[null],罪过啊。。。。

spring mybatis 3.2调用mysql存储过程返回多结果集(完整、亲测、可用)的更多相关文章

  1. python 调用mysql存储过程返回结果集

    存储过程: delimiter | ),)) begin select * from tb_test where mid = imid and user = iuser; end; | delimit ...

  2. MySQL 存储过程返回多个值

    MySQL  存储过程返回多个值   在本教程中,您将学习如何编写/开发返回多个值的存储过程. MySQL存储函数只返回一个值.要开发返回多个值的存储过程,需要使用带有INOUT或OUT参数的存储过程 ...

  3. Golang 用go-sql-driver 调用MySQL存储过程时的问题排查

    今天在用go-sql-driver做MySQL driver调用MySQL的存储过程时遇到一个罕见的报错.本文对这个错误及其解做一个简单的总结. 1 问题描述 按照go中sql包提供的接口,应用层代码 ...

  4. PHP调用MYSQL存储过程实例

    PHP调用MYSQL存储过程实例 标签: mysql存储phpsqlquerycmd 2010-09-26 11:10 11552人阅读 评论(3) 收藏 举报 实例一:无参的存储过程$conn = ...

  5. 调用MYSQL存储过程实例

    PHP调用MYSQL存储过程实例 http://blog.csdn.net/ewing333/article/details/5906887 http://www.cnblogs.com/kkchen ...

  6. 123 c#调用oracle存储过程返回数据集 --通过oracle存储过程返回数据集

    c#调用oracle存储过程返回数据集 2008-12-20 10:59:57|  分类: net|字号 订阅   CREATE OR REPLACE PACKAGE pkg_tableTypeIS  ...

  7. c#调用oracle存储过程返回数据集

    c#调用oracle存储过程返回数据集 2008-12-20 10:59:57|  分类: net|字号 订阅   CREATE OR REPLACE PACKAGE pkg_tableTypeIS  ...

  8. Oracle创建表语句(Create table)语法详解及示例、、 C# 调用Oracle 存储过程返回数据集 实例

    Oracle创建表语句(Create table)语法详解及示例 2010-06-28 13:59:13|  分类: Oracle PL/SQL|字号 订阅 创建表(Create table)语法详解 ...

  9. 《Entity Framework 6 Recipes》中文翻译系列 (14) -----第三章 查询之查询中设置默认值和存储过程返回多结果集

    翻译的初衷以及为什么选择<Entity Framework 6 Recipes>来学习,请看本系列开篇 3-6在查询中设置默认值 问题 你有这样一个用例,当查询返回null值时,给相应属性 ...

随机推荐

  1. poj2752seek the name, seek the fame【kmp】

    The little cat is so famous, that many couples tramp over hill and dale to Byteland, and asked the l ...

  2. 老师的blog整理

    python基础部分: 宝哥blog: https://www.cnblogs.com/guobaoyuan/ 开哥blog: https://home.cnblogs.com/u/Neeo 女神笔记 ...

  3. JavaScript ES6 规范

    ES6 简介 ECMAScript 6 简称 ES6,是 JavaScript 语言的下一代标准,已经在2015年6月正式发布了.它的目标是使得 JavaScript 语言可以用来编写复杂的大型应用程 ...

  4. spring中的BeanFactory与ApplicationContext的作用和区别

    BeanFactory 和ApplicationContext Bean 工厂(com.springframework.beans.factory.BeanFactory)是Spring 框架最核心的 ...

  5. CF750F New Year and Finding Roots 构造+树论

    正解:构造 解题报告: 传送门! 交互题交互题!哇好新鲜啊QwQ 首先考虑最傻逼的做法,应该是每个人都能想到的 首先看一下它给的条件,考虑到完全二叉树的性质,就可以发现,如果给的邻居只有一个,说明是叶 ...

  6. grunt学习二

    1. 新建文件和文件目录 mkdir grunt-in-action cd grunt-in-action cd grunt-in-action mkdir grunt-empty cd grunt- ...

  7. [记录]Visual Studio 插件

    NuGet Resharper Viasfora : 着色 ozcode2 : 调试 dbforge  调试 phptools vsdoc man DebugStudio Alpha Producti ...

  8. 【Loadrunner】Error -26601: Decompression function 错误解决、27728报错解决方案

       一. Error -26601: Decompression function 错误解决 Action2.c(30): Error -26601: Decompression function ...

  9. Lodash 中文文档 (v4.16.1) 手机版

    http://lodash.swift.ren/ 手机扫描二维码直接进入

  10. Python中使用中文正则表达式匹配指定的中文字符串

    业务场景: 从中文字句中匹配出指定的中文子字符串 .这样的情况我在工作中遇到非常多, 特梳理总结如下. 难点: 处理GBK和utf8之类的字符编码, 同时正则匹配Pattern中包含汉字,要汉字正常发 ...