ibatis 調用存儲過程


返回系統游標集合

示例一:多個參數,手動映射返回字段

  第一步:參數配置(入參、出參)

<!-- 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,都可以做數據類型轉換映射,這個視情況需要而改。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM