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存储过程的主要内容,如果未能解决你的问题,请参考以下文章

mybatis调用Oracle存储过程

从java调用oracle存储过程时在mybatis mapper中映射多个out参数

最近几天一直在搞Mybatis调用存储过程的问题,用<select>标签写的那种!然后用Java里写调用函数

MyBatis - 使用自定义对象调用存储过程

mybatis 调用 oracle 存储过程 select into 无记录时NO_DATA_FOUND异常处理分析

mybatis调用存储过程 无参带有输入输出参数,输出游标类型的 存储