如題。這篇博客講訴你如何在在spring+springmvc+mybatis項目中調用oracle的存儲過程(procedure),其實主要是mybatis下如何調用存儲過程,不帶參數的就不說了,就說說帶參數的存儲過程如傳參,獲取參數。java
一、先在oralce寫一個存儲過程程序員
create or replace procedure p_test( v_val1 in varchar2, v_val2 out varchar2 ) is v_val3 varchar2(10) :='word'; begin v_val2 := v_val1||v_val3; end;
這個過程什麼意思呢?很簡單輸入一個v_val1,過程定義了一個參數v_val3,v_val2 = v_val1+v_val3,輸出v_val2。順便說下怎麼在oralce裏調用存儲過程:spring
declare v_test1 varchar2(10); begin p_test('hello ',v_test1); dbms_output.put_line(v_test1); end;
很明顯,輸出的是hello wordsql
如今進入正題,怎麼在mybatis中調用呢?mybatis
先創建個xml文件,具體怎麼建xml文件或者怎麼在springmvc項目中調用mybatis的xml文件等等基礎問題,請看我上一篇博客,步步爲營搭建spring+springmvc+mybatis項目。mvc
而後寫下sql語句,內容以下:oracle
<select id="getProcedure" statementType="CALLABLE" parameterType="java.util.Map"> {call p_test(#{val1,mode=IN,jdbcType=VARCHAR},#{val2,mode=OUT,jdbcType=VARCHAR})} </select>
java裏這麼調用
app
Map map = new HashMap<String,String>(); map.put("val1","hello "); testMapper.getProcedure(map);//說一下,testMapper持久層的對象,直接調用testMapper這個方法,該方法不須要返回值,void便可 System.out.println(map.get("val2"));
這時輸出的就是hello word了。spa
特別申明!特別申明!特別申明!指針
調用存儲過程時,xml裏不要有亂七八糟的格式,有些程序員習慣美化本身的代碼,這個是好事,可是在這裏可能會搬起石頭砸本身的腳,好比有人喜歡這樣:
{ call p_test(#{val1,mode=IN,jdbcType=VARCHAR},#{val2,mode=OUT,jdbcType=VARCHAR}) }
看着是否是很清爽?是很清爽,可是會報空指針的錯誤,因此我提醒各位,這會就不要管代碼是否是好看了,能用就行,在{}之間不要換行!不要換行!不要換行!不要換行!不要換行!不要換行!不要換行!
重要的事情要說7遍,有人問空格可不能夠加,那我只能說,你開心就好。
固然,有些複雜的存儲過程參數不少,很長,寫一行不太方便閱讀,怎麼辦?其實能夠在參數中間換行的,好比這樣:
{call p_test(#{val1,mode=IN,jdbcType=VARCHAR}, #{val2,mode=OUT,jdbcType=VARCHAR})}
這樣仍是能夠的。
代碼手打,不免有漏字、錯字、描述不清現象,歡迎你們批評指教,切勿人身攻擊,若是以爲有用,就告訴我一聲,給我點鼓勵!