程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> 編程解疑 >> mybatis-如何通過MyBatis獲取mysql存儲過程返回的不確定個數的多個結果集?

mybatis-如何通過MyBatis獲取mysql存儲過程返回的不確定個數的多個結果集?

編輯:編程解疑
如何通過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存儲過程的不確定個數個結果集的正確方式?

最佳回答:


如果對結果集的格式沒有強制要求的話,如果可以接受合並為一個結果集返回的話:

 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;
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved