MyBatis 调用存储过程

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。

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注