MyBatis調用存儲過程,含有返回結果集、return參數和output參數


  Ibatis是我們經常使用的O/R映射框架,mybats是ibatis被Google收購后重新命名的一個工程,當然也做了大量的升級。而調用存儲過程也是一次額C/S架構模式下經常使用的手段,我們知道,ibatis調用存儲過程有一個專門的標簽<procedure>,在mybats里面已經沒有這本標簽了,而是通過一個參數statementType="CALLABLE"來區分。廢話不多說,直接看怎么寫吧!

測試環境:mybats3.0.4 + sqlserver2008 +Spring3.1.1

存儲過程:

use base_passport

go

 

create proc yhj_test

    @input_a int,

    @input_b int,

    @output_c int out

as

begin

    select * from config.city;

    set @output_c = @input_a*@input_b;

    return @input_a+@input_b;

end

Mybats配置:

<resultMap type="java.util.HashMap" id="resultMap">

       <result column="city_key" property="cityKey" javaType="java.lang.Integer" jdbcType="INTEGER"/>

       <result column="province_key" property="provinceKey" javaType="java.lang.Integer" jdbcType="INTEGER"/>

       <result column="city_name" property="cityName" javaType="java.lang.String" jdbcType="VARCHAR"/>

    </resultMap>

   

    <select id="testByProc" statementType="CALLABLE" parameterType="java.util.HashMap" resultMap="resultMap">

       <![CDATA[

           {#{d,mode=OUT,jdbcType=INTEGER}=call dbo.yhj_test(

              #{a,mode=IN,jdbcType=INTEGER},

              #{b,mode=IN,jdbcType=INTEGER},

              #{c,mode=OUT,jdbcType=INTEGER}

           )}    

       ]]>

    </select>

Java代碼

Map<String, Object> paramMap = new HashMap<String, Object>();

       paramMap.put("a", 2);

       paramMap.put("b", 3);

       List<City> citys = (List<City>) getTemplate().selectList(getNameSpaceAndMethod("testByProc"), paramMap);

       return citys;

通過以上代碼我們即可獲取對應的結果集,return參數和output參數。其中return參數和output參數放在傳入的paramMap中,其中,c是存儲過程的output參數,而d為return參數。

需要注意的事項:

1、  存儲過程的參數和名稱無關,只和順序有關系

2、  存儲過程的output參數,只能通過傳入的map獲取

3、  存儲過程返回的結果集可直接用返回的map接收

4、  存儲過程的return結果需要使用?=call procName(?,?)的第一個參數接收,需要指定對應的mode為OUT類型

5、  存儲過程對應的數據類型為枚舉類型,需要使用大寫,如VARCHAR

 

要點:output是在存儲過程中的參數的返回值(輸出參數),而ReturnValue是存儲過程返回的值(使用return關鍵字),一個存儲過程可以有任意多個依靠參數返回的值,但只有一個ReturnValue。

獲取存儲過程的返回值--通過查詢分析器獲得
     存儲過程大體分成三類:

1、返回記錄集的存儲過程:執行結果是一個記錄集,例如,從數據庫中檢索出符合某一個或幾個條件的記錄。

2、返回數值得的存儲過程(也可稱為標量存儲過程),其執行完后返回一個值,例如數據庫中執行一個有返回值的函數或命令。

3、行為存儲過程,用來實現數據庫的某個功能,而沒有返回值,例如在數據庫中的更新和刪除操作。

另外:含有return的存儲過程其返回值為return返回的那個值。

沒有return的存儲過程,無論執行結果又無結果集,其返回值都是0,

帶有輸出參數的存儲過程,如果有RETURN則返回RETURN返回的那個值,如果要SELECT輸出參數,則出現輸出參數的值,和有無RETURN無關。

轉自:http://yhjhappy234.blog.163.com/blog/static/316328322012455714892/


免責聲明!

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



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