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

jopen 11年前發布 | 48K 次閱讀 MyBatis MyBatis3 持久層框架

存儲過程:

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參數,而dreturn參數。

需要注意的事項:

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

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

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

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

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

 

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!