MyBatis 调用存储过程
MyBatis 支持调用存储过程。首先在映射文件里面添加标签用来调用存储过程:
<select id="mytestproc" parameterMap="testprocMap" statementType="CALLABLE">
CALL testproc(?,?)
</select>
<parameterMap type="java.util.Map" id="testprocMap">
<parameter property="id" mode="IN" jdbcType="INTEGER"/>
<parameter property="oid" mode="OUT" jdbcType="INTEGER"/>
</parameterMap>Code language: HTML, XML (xml)
其中 statementType="CALLABLE" 表示这条查询语句是一个存储过程。存储过程支持传入值和传出值,通过 parameterMap 来进行值的传入和传出。
创建存储过程
下面创建一个存储过程,传入一个值,修改后返回修改后的值:
-- 创建存储过程 传入id传出oid
DELIMITER $
CREATE PROCEDURE testproc(IN id INT, OUT oid INT)
BEGIN
IF id = 0 THEN
SELECT 100 INTO oid;
ELSE
SELECT 1000 INTO oid;
END IF;
END
$Code language: PHP (php)
测试存储过程
-- 调用存储过程
DELIMITER ;
SET @id = 0;
SET @oid = 0;
CALL testproc(@id, @oid);
SELECT @oid;Code language: CSS (css)
Java 代码调用
String statement = "cn.foxdevelop.mapper.mytestproc";
Map<String, Integer> parameterMap = new HashMap<String, Integer>();
parameterMap.put("id", 0);
parameterMap.put("oid", -1);
session.selectOne(statement, parameterMap);
Integer result = parameterMap.get("oid");
System.out.println(result);Code language: JavaScript (javascript)
执行后输出结果为 100。
Previous: 一对多关系映射
Next: MyBatis 缓存介绍