最近,有个开发提了个需求,希望中间件支持调用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. JavaScript 包管理工具npm 和yarn 对比

  2. 计蒜客 30996 - Lpl and Energy-saving Lamps - [线段树][2018ICPC南京网络预赛G题]

    题目链接:https://nanti.jisuanke.com/t/30996 During tea-drinking, princess, amongst other things, asked w ...

  3. HDU 1890 - Robotic Sort - [splay][区间反转+删除根节点]

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1890 Time Limit: 6000/2000 MS (Java/Others) Memory Li ...

  4. 2016江苏省CPC省赛 I - Itinerary Planning

    Description Mike moved to a new city. There are bus stations in the city, each has a unique name. Ea ...

  5. 0003python中的可变参数

    >>>def foo(x,y,z,*args,**kargs): print x print y print z print args print kargs >>> ...

  6. 与虚拟机连接出现ora-12514错误解决方法

    谈到ora-12154问题,网上有一大堆解决方法,原因基本统一:tns或listener配置不正确.对于listener配置不正确的一般较少发生,大多数人都是按照默认配置一路“下一步”过来的,基本都是 ...

  7. ubuntu环境下快速搭建开发环境

    接触ubuntu已经半年了,虽然游戏啊qq啊在linux下配置稍微麻烦一些,但是作为开发环境,ubuntu真的是好东西,无论是c啊还是php and etc 看到官网上文档开发环境建议wamp,如果是 ...

  8. JDK 伪共享解决方案

    关于AtomicReference AtomicReference是由JAVA5引入的,用于对一个对象引用进行原子操作,我们可以看到AtomicReference的实现是用CAS技术对引用进行指令级别 ...

  9. js_常见特效——点击切换_背景颜色_收起与展开

    <script src="../js/jquery-1.8.3.min.js"></script><script type="text/ja ...

  10. Intel 设计缺陷背后的原因是什么? | Linux 中国

    版权声明:本文为博主原创文章.未经博主同意不得转载. https://blog.csdn.net/F8qG7f9YD02Pe/article/details/79386769 wx_fmt=jpeg& ...