返回系統游標集合
示例一:多個參數,手動映射返回字段
第一步:參數配置(入參、出參)
<!-- property屬性指定HashMap的具體鍵,雖然Map是無序的但是存儲過程的入參順序會按照parameter標簽的排列順序執行,mode屬性指定入參或返回值 --> <parameterMap class="java.util.HashMap" id="SHEHE_ERROR_Map"> <parameter property="FRCODE" jdbcType="VARCHAR" javaType="java.lang.String" mode="IN" /> <parameter property="FORGID" jdbcType="VARCHAR" javaType="java.lang.String" mode="IN" /> <parameter property="START" jdbcType="NUMBER" javaType="java.lang.Integer" mode="IN" /> <!-- 當oracle數據庫參數是number類型時,必須得指定java與oracle數據類型的對應關系 --> <parameter property="END" jdbcType="NUMBER" javaType="java.lang.Integer" mode="IN" /> <!-- 當oracle數據庫參數是游標時,必須得指定java與oracle數據類型的對應關系 --> <parameter property="out_cur" javaType="java.sql.ResultSet" jdbcType="ORACLECURSOR" mode="OUT" /> </parameterMap>
第二步:返回值,將返回值封裝到HashMap中
<resultMap class="java.util.HashMap" id="directoryMonitor_out_cursor"> <!-- column代表的是返回的字段,property代表的是HashMap的鍵,指定具體的鍵負責接收 --> <result property="FORGID" column="FORGID"/> <result property="FORGNAME" column="FORGNAME"/> <result property="FCENNAME_TEM_COUNT" column="FCENNAME_TEM_COUNT"/> <result property="ISNULLCENCODE_COUNT" column="ISNULLCENCODE_COUNT"/> <result property="TOTALCOUNT" column="TOTALCOUNT"/> </resultMap>
第三步:調用存儲過程
<!-- ?號的個數須與<parameter>標簽的個數保持一致 --> <procedure id="getSHEHE_ERROR_DATA" parameterMap="SHEHE_ERROR_Map" resultMap="directoryMonitor_out_cursor"> <![CDATA[ {call PRC_DIAITEM_MONITOR(?,?,?,?,?)} ]]> </procedure>
2020/04/18
說明:參數映射parameterMap的步驟不能省略(第一步);
返回值映射可以省略(第二步);
另外,mode的值:IN或者OUT必須大寫;
只有當數據庫的字段是varchar2類型時,可以和java的String類型自動匹配,也就是不用聲明javaType和jdbcType,否則其他數據類型都得指定匹配對象。
不然就會報這個錯。
示例二:只有一個參數,自動映射返回數據
<!-- 指標三級查詢 --> <!-- ?映射,和?數量保持一致 --> <parameterMap class="java.util.HashMap" id="indexMap"> <!-- 游標cursor必須聲明屬性javaType和jdbcType,並設置值 --> <parameter property="OUT_CURSOR" javaType="java.sql.ResultSet" jdbcType="ORACLECURSOR" mode="OUT"/> </parameterMap> <!-- parameterMap必須映射,resultMap可以不做映射,直接用resultClass接收返回的數據 --> <procedure id="getIndexDetail" parameterMap="indexMap" resultClass="java.util.HashMap"> <![CDATA[ {call PRC_INDEX_SEARCH(?)} ]]> </procedure>
20200616
說明:當只有一個問號?,用於接收存儲過程返回結果時,可以使用resultClass接收,不用映射返回數據,否則,返回的數據都要進行映射!!!
不管是parameterMap還是resultMap,都可以做數據類型轉換映射,這個視情況需要而改。