(網上搜到的案例,都是固定個數的多個結果集的場景,比如這種: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;