存储过程:
usebase_passport go
createprocyhj_test @input_aint, @input_bint, @output_cintout as begin select*fromconfig.city; set@output_c=@input_a*@input_b; return@input_a+@input_b; end |
Mybats配置:
<resultMaptype="java.util.HashMap"id="resultMap"> <resultcolumn="city_key"property="cityKey"javaType="java.lang.Integer"jdbcType="INTEGER"/> <resultcolumn="province_key"property="provinceKey"javaType="java.lang.Integer"jdbcType="INTEGER"/> <resultcolumn="city_name"property="cityName"javaType="java.lang.String"jdbcType="VARCHAR"/> </resultMap>
<selectid="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 =newHashMap<String, Object>(); paramMap.put("a", 2); paramMap.put("b", 3); List<City> citys = (List<City>) getTemplate().selectList(getNameSpaceAndMethod("testByProc"), paramMap); returncitys; |
通过以上代码我们即可获取对应的结果集,return参数和output参数。其中return参数和output参数放在传入的paramMap中,运行结果如下:
c是存储过程的output参数,而d为return参数。
需要注意的事项:
1、存储过程的参数和名称无关,只和顺序有关系
2、存储过程的output参数,只能通过传入的map获取
3、存储过程返回的结果集可直接用返回的map接收
4、存储过程的return结果需要使用?=call procName(?,?)的第一个参数接收,需要指定对应的mode为OUT类型
5、存储过程对应的数据类型为枚举类型,需要使用大写,如VARCHAR