MyBatis 3 中使用預存程序

來源:互聯網
上載者:User
        Mybatis 是 iBatis 被 Google 收購後重新命名的一個工程,當然也做了大量的升級。iBatis 2.x 調用預存程序有一個專門的標籤 <procedure>,在 Mybats 3.x 裡面已經沒有這個標籤了,而是通過一個參數 statementType="CALLABLE" 來區分。         預存程序有三種類型的參數,分別為 IN(輸入參數),OUT(輸出參數),INOUT(輸入輸出參數)。一個預存程序,可以有多個 IN 參數,至多有一個 OUT 或 INOUT 參數。 

    ◇ 只有 IN 參數的預存程序 Sql代碼  

  1. CREATE PROCEDURE proc_only_input (  
  2.   @hello VARCHAR(8) IN  
  3. ) AS   
  4. ...  

Xml代碼  

  1. <select id="selectSth" statementType="CALLABLE" parameterType="hashmap">  
  2.   <![CDATA[ 
  3. { call proc_only_input(#{good, mode=IN, jdbcType=VARCHAR}) } 
  4.   ]]>  
  5. </select>  

Java代碼  

  1. Map params = new HashMap();  
  2. // 調用預存程序的傳遞的參數名可以不和定義預存程序的參數名保持一致,只要保證它們的順序是一致的即可。  
  3. params.put("good", "china");  
  4. session.select("pkg.selectSth", params);  

    ◇ 有 INOUT 或 OUT 參數的預存程序 Sql代碼  

  1. CREATE PROCEDURE proc_out (  
  2.   @yes VARCHAR(8) IN,  
  3.   @fly VARCHAR(16) OUT  
  4. ) AS   
  5. ...  
  6. return 'return something'  

Xml代碼  

  1. <!--   
  2.   如果調用的過程中存在 out 參數,那麼所有的參數都必須用問號的形式傳入,如: { call test_procedure(?, ?, ?, ?)}。要是有參數不是問號形式傳入,如:{ call test_procedure(?, 3, ?, ?)},則會異常伺候:Output parameter not allowed as argument list prevents use of RPC  
  3.   
  4.   另外,對於有輸出參數的預存程序,理論上也可以這樣寫:  
  5. { #{gog, mode=OUT, jdbcType=VARCHAR} = call proc_out(#{yes, mode=IN, jdbcType=VARCHAR}) }  
  6.   
  7.   可我在 sql server 中嘗試這樣寫,報錯,說是卻是 @fly 參數(proc_out 的第二個參數的名字就是 fly)。既然如此,那我就一個一個參數的寫,就像下面的這樣。  
  8. -->  
  9. <select id="selectSth" statementType="CALLABLE" parameterType="hashmap">  
  10.   <![CDATA[ 
  11. { call proc_out(#{yes, mode=IN, jdbcType=VARCHAR}, #{gog, mode=OUT, jdbcType=VARCHAR}) } 
  12.   ]]>  
  13. </select>  

Java代碼  

  1. Map params = new HashMap();  
  2. // 調用預存程序的傳遞的參數名可以不和定義預存程序的參數名保持一致,只要保證它們的順序是一致的即可。  
  3. // 同時,預存程序的輸出參數的值必須通過 map 來接收  
  4. params.put("yes", "china");  
  5. session.select("pkg.selectSth", params);  
  6. // 得到輸出參數的值  
  7. String result = params.(String) get("gog");  

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.