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

  Ibatis是咱們常常使用的O/R映射框架,mybats是ibatis被Google收購後從新命名的一個工程,固然也作了大量的升級。而調用存儲過程也是一次額C/S架構模式下常常使用的手段,咱們知道,ibatis調用存儲過程有一個專門的標籤<procedure>,在mybats裏面已經沒有這本標籤了,而是經過一個參數statementType="CALLABLE"來區分。廢話很少說,直接看怎麼寫吧!java

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

存儲過程:數據庫

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代碼app

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參數。框架

須要注意的事項:函數

一、  存儲過程的參數和名稱無關,只和順序有關係sqlserver

二、  存儲過程的output參數,只能經過傳入的map獲取測試

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

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

五、  存儲過程對應的數據類型爲枚舉類型,須要使用大寫,如VARCHAR

 

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

獲取存儲過程的返回值--經過查詢分析器得到
     存儲過程大致分紅三類:

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

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

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

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

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

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

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

相關文章
相關標籤/搜索