2 kwenpp kwenpp 于 2016.02.03 11:20 提问

Mybatis调用存储过程返回多个结果集

存储过程返回两个结果集(游标)。

 CREATE OR REPLACE FUNCTION t_user_func(id varchar(20))
  RETURNS SETOF refcursor AS
$BODY$
Declare
code refcursor;
result refcursor;
BEGIN     
  --返回错误码
  OPEN code FOR select 1010 as code;
  RETURN NEXT code;
  --返回查询结果集
  OPEN result FOR EXECUTE 'select * from t_user where user_id =''' ||id||'''' ;
  RETURN NEXT result;
  RETURN;
End;
$BODY$
  LANGUAGE plpgsql VOLATILE;

Mybatis映射文件是这样写的:

<select id="getUserByID" parameterType="map" statementType="CALLABLE">
    {call t_user_func(
    #{id,jdbcType=INTEGER,mode=IN},
    #{refcursor, mode=OUT,
    jdbcType=OTHER, javaType=ResultSet, resultMap=userResultMap}
    )
    }
</select>

<resultMap id="userResultMap" type="com.cet.ngp.model.UserStruct">
    <collection property="codes" ofType="com.cet.ngp.model.ResultCode">
        <id column="code" property="code" jdbcType="INTEGER" />
    </collection>
    <collection property="users" ofType="com.cet.ngp.model.User">
        <id column="user_id" property="userId" jdbcType="VARCHAR" />
        <result column="user_name" property="userName" jdbcType="VARCHAR" />
        <result column="user_birthday" property="userBirthday"
            jdbcType="DATE" />
        <result column="user_salary" property="userSalary" jdbcType="INTEGER" />
    </collection>
</resultMap>

只能获取到,code结果集,无法获取user结果集。
要怎么改,才能获取到user结果集。

2个回答

kwenpp
kwenpp   2016.02.03 11:23

实现代码是这样的:

 public List<UserStruct> getUserById(String id) {
        ApplicationContext ctx= DBModule.getConfigContext();
        UserMapper userDao=(UserMapper) ctx.getBean("userMapper");        
         
        Map<String, Object> map = new HashMap<String, Object>();
        map.put("id", id);   
        userDao.getUserByID(map);
                //此处获取结果集
        List<UserStruct> resultList = (ArrayList<UserStruct>) map.get("refcursor");
         
        return resultList;
    }   
RS_zhengjie
RS_zhengjie   2017.07.25 11:32

<?php
$a = 89;
?>


Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
mybatis调用存储过程返回多个结果集
我使用的是mysql数据库,映射2个实体对象:Account ,BankWatermybaits调用的时候需要使用resultMap属性由于mysql数据库支持存储过程使用select返回结果集,所以这里没有写out传入参数<resultMap type="com.kay.entity.Account" id="account"> <id column="account_id" pr
mybatis 调用存储过程,处理返回2个不同类型的结果集
Expected one result (or null) to be returned by selectOne()
springmvc+mybatis使用存储过程查询多结果集
&amp;lt;span style=&quot;background-color: rgb(255, 255, 255); font-family: Arial, Helvetica, sans-serif;&quot;&amp;gt;有时候查询一些数据需要存储过程,使用存储过程能大大的减少查询次数,增强性能。如下是使用存储过程完成一段复杂的查询。查询内容是根据课程的ID,难易程度和题目数量随机查出来题目。数据库如下&amp;lt;/sp...
mybatis调用oracle存储过程-传入多个参数返回结果集
mybatis.xml配置:                                                                                CALL procedureTest_02( #{user_login,mode=IN,jdbcType=VARCHAR
Mybatis中调用返回结果集的存储过程
一、编写与PL/SQL调试存储过程 1.1、编写 get_recomend_news.sql CREATE OR REPLACE PROCEDURE get_recomend_news(userName in varchar2,resultList out sys_refcursor) IS --定义变量 CURSOR my_cursor is select a.news_type from
mybatis调用mysql存储过程返回结果集
存储过程中经常需要返回结果集。 Mysql 中直接用 select 即可返回结果集。而 oracle 则需要使用游标来返回结果集。这一点 Mysql 相对比较方便,如下代码即可实现输出结果集: 存储过程定义: DELIMITER $$ DROP procedure IF EXISTS pro_sql_data1 $$ CREATE procedure pro_sql_data1(in s
mybatis 调用oracle 存储过程并返回结果集
1. xml文件 {call cassify_massive_water_bill( #{startMonth,mode=IN}, #{endMonth,mode=IN}, #{waterProperty,mode=IN}, #{avgYsl,mode=I
MyBatis调用存储过程返回结果集
存储过程:create or replace procedure get_result_by_sql(p_sql in varchar2,p_result out sys_refcursor) is begin open p_result for p_sql; end get_result_by_sql;Mbatis配置:<resultMap id="getResultBySQLMap" typ
mybatis调用oracle存储过程返回结果集
存储过程: CREATE OR REPLACE procedure P_TEST(v_cursor OUT sys_refcursor) as begin OPEN v_cursor FOR select POST_ID, FORUM_ID, USER_ID, POST_TITLE, POST_CONTENT, POST_TIME, TOTAL_COMMENT_COUNT from POS
MyBatis调用存储过程,含有返回结果集、return参数和output参数 .
mybatis调用存储过程,学习案例