java项目实现简单的存储过程,这里dao,service,控制层,代码不用变,配置也不用变(新手上路,就简单的实现了一个添加操作)
存储过程 源码附上:(最简单的那种,没有返回类型),oracle库表前提是要有的,
create or replace procedure setemp(
v_empno emp.empno%type,
v_ename emp.ename%type,
v_job emp.job%type,
v_mgr emp.mgr%type,
v_hiredate emp.hiredate%type,
v_sal emp.sal%type,
v_comm emp.comm%type,
v_deptno emp.deptno%type
)
is
begin
insert into emp(empno,ename,job,mgr,hiredate,sal,comm,deptno) values(v_empno,v_ename,v_job,v_mgr,v_hiredate,v_sal,v_comm,v_deptno);
end setemp;
第二步只要更改dao的映射文件中的sql语句修改, 我在控制台接受的时候用@requestparam 把值封装到了Map<String,Object> map 中了,所以下面的parameter是map类型,源码附上:
<insert id="saveEmp" statementType="CALLABLE" parameterType="map">
<![CDATA[
call setemp(#{empNo,jdbcType=INTEGER,mode=IN},#{eName,jdbcType=VARCHAR,mode=IN},#{job,jdbcType=VARCHAR,mode=IN},#{mgr,jdbcType=INTEGER,mode=IN},to_date(#{hireDate,mode=IN},'yyyy-MM-dd'),#{sal,jdbcType=INTEGER,mode=IN},#{comm,jdbcType=INTEGER,mode=IN},#{deptNo,jdbcType=INTEGER,mode=IN})
]]>
</insert>
切记:有些地方的代码是 <![CDATA[ { call .........} ]]> 细心的能发现这和我上面的相比加了{} 在call 外面,这样我测试过是不可以的, 测试多次发现
<![CDATA[ ]]> 和 { } 只存在就可以,意思把上面代码也可以为{ call setemp(#{empNo,jdbcType=INTEGER,mode=IN},#{eName,jdbcType=VARCHAR,mode=IN},#{job,jdbcType=VARCHAR,mode=IN},#{mgr,jdbcType=INTEGER,mode=IN},to_date(#{hireDate,mode=IN},'yyyy-MM-dd'),#{sal,jdbcType=INTEGER,mode=IN},#{comm,jdbcType=INTEGER,mode=IN},#{deptNo,jdbcType=INTEGER,mode=IN}) } 这两种都是没问题的
望大家指教!