1. 程式人生 > >mybatis調用Oracle存儲過程

mybatis調用Oracle存儲過程

sta ack ram state odin param sele exception put

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存儲過程