1. 程式人生 > 實用技巧 >mybatis 呼叫儲存過程 示例

mybatis 呼叫儲存過程 示例

準備工作(新手看)

  1.建立一個mybatis對映類

  只需要建立介面就行,無需建立實現類

  2.建立一個mybatis對映檔案

  注意:

  mapper.xml的namespace必須和mapper.java類所在的全路徑保持一致,否則無法完成對映;

  mapper.java的方法名稱必須和mapper.xml的id,名稱保持一致,否則方法和SQL匹配不上。

  2.確保springboot能夠掃描到該類

  3.確保spring能夠掃描到mapper.xml

  在application.yml配置檔案中指定掃描路徑

具體實現:

  說明:這裡呼叫的是mysql儲存過程。

  方式一:入參全部羅列出來,返回引數用map接收;

  java方法

Map<String, String> getOrgCurrentno(String orgCode, String invoicingClerk, String ivcType, String medicalType);

  xml

<!-- id="getOrgCurrentno"一定要與dao層需要匹配的方法名一致 -->
<select id="getOrgCurrentno" statementType="CALLABLE" resultType="java.util.Map">
    <![CDATA[
        {call PRO_GET_IVCVOUCHER_NUMBER(#{orgCode,mode=IN,jdbcType=VARCHAR},
                                    #{invoicingClerk,mode=IN,jdbcType=VARCHAR},
                                    #{ivcType,mode=IN,jdbcType=VARCHAR},
                                    #{medicalType,mode=IN,jdbcType=VARCHAR},
                                    #{aaa,mode=OUT,jdbcType=VARCHAR},
                                    #{bbb,mode=OUT,jdbcType=VARCHAR})}
    ]]>
</select>

  執行結果如下:

  這裡需要注意的是:

  第一,statementType的值必須是CALLABLE,貌似是告訴mybatis將要執行的是儲存過程;

  第二,當返回資料型別使用map接收時,resultType的值可以有4種表現形式:java.util.Map/map/java.util.HashMap/hashmap;

  第三,儲存過程入參使用IN,返回引數使用OUT;

  第四,引數型別需要指定對應的jdbc型別;

  第五,當使用map接收返回引數時,在xml中指定的名稱與儲存過程實際返回的引數名稱並沒有關係,例如:我上面隨便起的aaa,bbb,對儲存過程返回結果絲毫沒有產生影響;

  方式二:入參用java類,返參用map。

  java方法

Map<String, String> getOrgCurrentno2(Map<String, String> paramsMap);

  xml

<select id="getOrgCurrentno2" parameterType="map" statementType="CALLABLE" resultType="hashmap">
    <![CDATA[
        {call PRO_GET_IVCVOUCHER_NUMBER(#{aa,mode=IN,jdbcType=VARCHAR},
                                    #{bb,mode=IN,jdbcType=VARCHAR},
                                    #{cc,mode=IN,jdbcType=VARCHAR},
                                    #{dd,mode=IN,jdbcType=VARCHAR},
                                    #{ee,mode=OUT,jdbcType=VARCHAR},
                                    #{ff,mode=OUT,jdbcType=VARCHAR})}
    ]]>
</select>

  返回的資料是一樣的。

  第六,到這裡,我們就可以得出這樣的結論:

  入參和返參的引數名稱對於mysql來說,沒有絲毫影響,即使雙方的名稱不一樣,只要保證順序一樣就是OK的;

  第七,經過我的測試發現:

  當入參使用map時,parameterType屬性是可以不宣告的,執行起來沒有任何影響。

  前4條是硬性規範,後3條只是為了證明不影響正常執行,也就是不規範的用法,最好還是遵守。  

寫在最後

  哪位大佬如若發現文章存在紕漏之處或需要補充更多內容,歡迎留言!!!

相關推薦: