mysql
  • spring
  • ibatis
  • 2015-07-21 82 views 0 likes 
    0

    我正在使用IBatis和Spring框架。IBatis如何在一次調用中執行多個查詢

    我想執行多個查詢,但我無法得到響應。

    <select id="getUIs" resultMap="blpUiVOMap" parameterClass="Map"> 
        SELECT 
         GROUP_CONCAT(DISTINCT 
         CONCAT('COUNT(CASE WHEN bug.BUG_STT = ', STT_ID, ' THEN 1 END) AS ''bugI', STT_ID, '''') 
        ) INTO @sql 
        from BLP_STT <![CDATA[;]]> 
    
        SET @sql = CONCAT('SELECT ui.UI_ID, ui.UI_NM, cat.CAT_ID, cat.CAT_NM, cat.PRNT_ID, cat1.CAT_NM as PRNT_NM,',@sql,'FROM BLP_UI ui JOIN BLP_CAT cat ON ui.CAT_ID = cat.CAT_ID JOIN BLP_CAT cat1 ON cat.PRNT_ID = cat1.CAT_ID JOIN BLP_BUG bug ON ui.UI_ID = bug.UI_ID JOIN BLP_STT stt ON bug.BUG_STT = stt.STT_ID WHERE 1 = 1 GROUP BY ui.UI_ID ORDER BY ui.UI_ID ASC') <![CDATA[;]]> 
    
        PREPARE stmt FROM @sql <![CDATA[;]]> 
        EXECUTE stmt <![CDATA[;]]> 
        DEALLOCATE PREPARE stmt <![CDATA[;]]> 
    </select> 
    

    在MySQL中,這個查詢工作正常。

    回答

    1

    <select>將在JDBC中創建一個單獨的PreparedStatement。您正試圖從MySQL命令行執行命令。這在JDBC或MyBatis中不起作用。

    您將需要創建一個包含所有字符串的單個查詢。也許這樣?

    SELECT ui.UI_ID, ui.UI_NM, cat.CAT_ID, cat.CAT_NM, cat.PRNT_ID, cat1.CAT_NM as PRNT_NM, 
    (SELECT 
        GROUP_CONCAT(DISTINCT 
        CONCAT('COUNT(CASE WHEN bug.BUG_STT = ', STT_ID, ' THEN 1 END) AS ''bugI', STT_ID, '''') 
    ) 
        from BLP_STT 
    ) 
    FROM BLP_UI ui JOIN BLP_CAT cat ON ui.CAT_ID = cat.CAT_ID JOIN BLP_CAT cat1 ON cat.PRNT_ID = cat1.CAT_ID JOIN BLP_BUG bug ON ui.UI_ID = bug.UI_ID JOIN BLP_STT stt ON bug.BUG_STT = stt.STT_ID WHERE 1 = 1 GROUP BY ui.UI_ID ORDER BY ui.UI_ID ASC') 
    

    請注意,您也不需要在XML中添加;

    相關問題