預存程序:
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