spring+springmvc+mybatis項目中如何調用oracle過程(procedure)

jopen 8年前發布 | 48K 次閱讀 JEE框架

        如題。這篇博客講訴你如何在在spring+springmvc+mybatis項目中調用oracle的存儲過程(procedure),其實主要是mybatis下如何調用存儲過程,不帶參數的就不說了,就說說帶參數的存儲過程如傳參,獲取參數。

        1、先在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里調用存儲過程:

declare 
    v_test1 varchar2(10);
begin
    p_test('hello ',v_test1);
    dbms_output.put_line(v_test1);
end;

        很明顯,輸出的是hello word

        現在進入正題,怎么在mybatis中調用呢?

        先建立個xml文件,具體怎么建xml文件或者怎么在springmvc項目中調用mybatis的xml文件等等基礎問題,請看我上一篇博客,步步為營搭建spring+springmvc+mybatis項目。

        然后寫下sql語句,內容如下:

<select id="getProcedure" statementType="CALLABLE" parameterType="java.util.Map">
    {call p_test(#{val1,mode=IN,jdbcType=VARCHAR},#{val2,mode=OUT,jdbcType=VARCHAR})}
</select>

        java里這么調用

Map map = new HashMap<String,String>();
map.put("val1","hello ");
testMapper.getProcedure(map);//說一下,testMapper持久層的對象,直接調用testMapper這個方法,該方法不需要返回值,void即可
System.out.println(map.get("val2"));

        這時輸出的就是hello word了。


        特別申明!特別申明!特別申明!

        調用存儲過程時,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})}

        這樣還是可以的。




代碼手打,難免有漏字、錯字、描述不清現象,歡迎大家批評指教,切勿人身攻擊,如果覺得有用,就告訴我一聲,給我點鼓勵!

來自: http://my.oschina.net/tiandaochouqincai/blog/599140

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!