ych516 2016-03-02 10:35 采纳率: 100%
浏览 4293
已采纳

如何通过MyBatis获取mysql存储过程返回的不确定个数的多个结果集?

(网上搜到的案例,都是固定个数的多个结果集的场景,比如这种:http://www.iteye.com/problems/78259 。**请注意,我的问题与此不同**。)

我需要返回不确定个数个结果集。MySQL存储过程形如:

while(i <= n + 1) do
    select * from t_tab t where t.a = i limit 0,20;
end while

其中,**n是外部传入的。结果集的个数为n个,每个结果集最多20条记录**。

我要如何才能通过myBatis框架获取完整结果集。
期望返回的数据结构:

     List<List<Tab>> queryTop20(@Param("n") Integer n);

通过如下的配置不能如愿:

    <select id="queryTop20" statementType="CALLABLE"
        resultType="Tab">
        <![CDATA[  
            {call queryTop20(#{n, mode=IN, jdbcType=INTEGER}
            )}  
        ]]>
    </select>

如下配置虽然能得到想要的结果,但是这也太烂了,而且会限定n的上限:

     <select id="queryTop20" statementType="CALLABLE"
        resultMap="Tab,Tab,Tab ,Tab ,Tab ,Tab ,Tab ,Tab ,Tab ,Tab ,Tab ,Tab ,Tab ,Tab ,Tab ,Tab ,Tab ,Tab ,Tab ,Tab ,Tab ,Tab ,Tab ,Tab ,Tab ,Tab ,Tab ,Tab ,Tab ,Tab ,Tab ,Tab ,Tab ,Tab ,Tab ,Tab ,Tab ,Tab ,Tab ,Tab ,Tab ,Tab ,Tab ,Tab ,Tab ,Tab ,Tab ,Tab ,Tab ,Tab ,Tab ,Tab ,Tab ,Tab ,Tab ,Tab ,Tab ,Tab ,Tab ,Tab ,Tab ">
        <![CDATA[  
            {call queryTop20(#{n, mode=IN, jdbcType=INTEGER}
            )}  
        ]]>
    </select>

请问,怎样才是通过MyBatis获取MySQL存储过程的不确定个数个结果集的正确方式?

  • 写回答

5条回答 默认 最新

  • wuke_wubuke 2016-03-03 01:25
    关注

    如果对结果集的格式没有强制要求的话,如果可以接受合并为一个结果集返回的话:

     List<Tab> queryTop20(@Param("n") Integer n);
    

    那么,可以将多个结果集放入临时表,然后将结果一并返回:

        CREATE TEMPORARY TABLE IF NOT EXISTS temp_tab
        (
        ...
        );
        TRUNCATE TABLE temp_tab;
    
        while(i <= n + 1) do
            INSERT INTO temp_tab select * from t_tab t where t.a = i limit 0,20;
        end while
    
        SELECT * FROM temp_tab;
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(4条)

报告相同问题?

悬赏问题

  • ¥15 如何使用chatgpt完成文本分类任务?
  • ¥15 已知速度v关于位置s的等式,怎么转化为已知位置求速度v的等式
  • ¥15 我有个餐饮系统,用wampserver把环境配置好了,但是后端的网页却进去,是为什么,能不能帮远程一下?
  • ¥15 R运行没有名称为"species"的插槽对于此对象类"SDMmodelCV"
  • ¥20 基于决策树的数字信号处理,2ask 2psk 2fsk的代码,检查下报错的原因
  • ¥15 wincc已组态的变量过多
  • ¥60 如图:直线与椭圆X轴平行,求直线与椭圆任意一点的相切坐标计算公式
  • ¥50 如何用python使用opencv里的cv::cudacodec::VideoWriter函数对视频进行GPU硬编码
  • ¥100 c#solidworks 二次开发 工程图自动标边线法兰 等折弯尺寸怎么标
  • ¥15 halcon DrawRegion 提示错误