mybatis中调用带输入输出参数的存储过程
函数调用同样适用
1、存储过程
在SQL server上写一个简单的存储过程,带输入输出参数:
ALTER PROCEDURE [dbo].[test_procedure]
@itemNbr int,
@upc nvarchar(20) output
AS
BEGIN
SELECT @upc = [ITEM_UPC]
FROM [PFSreport].[dbo].[ITEM_INFO]
WHERE [ITEM_NBR] = @itemNbr
END
2、代码调用
@GetMapping("/runTestProcedure")
@ResponseBody
public String runTestProcedure(@RequestParam("itemNbr") Integer itemNbr) {
return testService.runTestProcedure(itemNbr).toString();
}
public Map<String, Object> runTestProcedure(Integer itemNbr) {
Map<String, Object> map = new HashMap<>();
map.put("itemNbr", itemNbr);
map.put("upc", "");
testDao.runTestProcedure(map);
return map;
}
dao接口类的代码就不贴出来了。
此处需要将储存过程中定义的参数都放入map中,存储过程执行之后,会将值存入我们传入的map里面。(输出参数只需定义好key即可)
3、xml写法
<parameterMap id="runTestMap" type="java.util.Map">
<parameter property="itemNbr" jdbcType="INTEGER" mode="IN"></parameter>
<parameter property="upc" jdbcType="NVARCHAR" mode="OUT"></parameter>
</parameterMap>
<select id="runTestProcedure" parameterMap="runTestMap" statementType="CALLABLE">
{CALL test_procedure(?, ?)}
</select>
如此,调用存储过程就可得到输出参数了: