1.创建存储过程 例如
存储过程中 in,out, in out 表示;
in 是参数的默认模式,这种模式就是在程序运行的时候已经具有值,在程序体中值不会改变。
out模式定义的参数只能在过程体内部赋值,表示该参数可以将某个值传递回调用他的过程
in out 表示高参数可以向该过程中传递值,也可以将某个值传出去
创建一个加法的存储过程,输入2个数字,然后计算和输出结果
DROP PROCEDURE IF EXISTS `proc_adder`;
CREATE DEFINER=`root`@`localhost` PROCEDURE `proc_adder`(IN a int, IN b int, OUT sum int)
BEGIN
#Routine body goes here...
DECLARE c int;
if a is null then set a = 0;
end if;
if b is null then set b = 0;
end if;
set sum = a + b;
select sum; #查询,返回sum结果集
END
2.Navicat调用测试存储过程
call proc_adder(2,5,@a);
select @a;
3.java代码调用
在mapper.java中新建一个方法
/**
* 加法计算
* @param a
* @param b
* @return
*/
Integer sumFunction(Integer a, Integer b);
在mapper.xml中新建一个查询
<!--存储过程返回结果-->
<resultMap id="sunResult" type="com.web.bean.testBean" >
<result column="sum" property="sum"/>
</resultMap>
<!--调用存储过程-->
<select id="sumFunction" resultMap="sunResult" parameterType="java.lang.Integer" statementType="CALLABLE">
{call proc_adder(
#{a,jdbcType=INTEGER,mode=IN},
#{b,jdbcType=INTEGER,mode=IN},
#{sum,jdbcType=INTEGER,mode=OUT}
)}
</select>
call proc_adder 执行这个存储过程
mode=IN a和b 说明 a和b 是传的参数;
mode=OUT sum 说明 sum 可以返回的值;
jdbcType=INTEGER 是对应数据库类型 与上面创建存储过程的类型一致
这样调用后就可以得到返回结果了,接下来的调用就跟平时的代码调用是一样的了。