mybatis调用Oracle存储过程
Posted 小狗吃月亮
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mybatis调用Oracle存储过程相关的知识,希望对你有一定的参考价值。
oracle procedure代码
CREATE OR REPLACE PROCEDURE dept_insert_proc(
v_deptno dept.deptno%TYPE,
v_dname dept.dname%TYPE,
v_loc dept.loc%TYPE,
v_result OUT NUMBER)
IS
v_deptCount NUMBER;
BEGIN
SELECT COUNT(1)INTO v_deptCount FROM dept WHERE deptno=v_deptno ;
IF v_deptCount>0 THEN
v_result:=-1;
DBMS_OUTPUT.put_line(‘部门已存在!‘);
ELSE
INSERT INTO dept(deptno,dname,loc)VALUES(v_deptno,v_dname,v_loc);
v_result:=0;
DBMS_OUTPUT.put_line(‘新部门添加成功!‘);
COMMIT;
END IF;
END;
/
dao接口
package com.jinlin.dao;
import org.apache.ibatis.annotations.Param;
import com.jinlin.entity.Dept;
public interface CallMapper {
public void callProcedure(@Param("dept")Dept dept,@Param("result")int result)throws Exception;
}
CallMapper.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.jinlin.dao.CallMapper">
<!-- 调用存储过程 -->
<select id="callProcedure" statementType="CALLABLE">
{
CALL dept_insert_proc(
#{dept.deptno,mode=IN},
#{dept.dname,mode=IN},
#{dept.loc,mode=IN},
<!-- out参数必须指定jdbcType -->
#{result,mode=OUT,jdbcType=NUMERIC}
)
}
</select>
</mapper>
测试
@Test
public void testDaoProcedure()throws Exception {
Dept dept = new Dept();
dept.setDeptno(60);
dept.setDname("魔乐科技");
dept.setLoc("北京");
int result = 0;
callMapper.callProcedure(dept, result);
System.out.println(result);
}
以上是关于mybatis调用Oracle存储过程的主要内容,如果未能解决你的问题,请参考以下文章
从java调用oracle存储过程时在mybatis mapper中映射多个out参数
最近几天一直在搞Mybatis调用存储过程的问题,用<select>标签写的那种!然后用Java里写调用函数