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>

  執行結果如下:

  語法:

  {call 存儲過程名稱(#{變量名稱},#{變量名稱},...)}

  這里需要注意的是:

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

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

  第三,存儲過程入參使用IN,返回參數使用OUT(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條只是為了證明不影響正常執行,也就是不規范的用法,最好還是遵守。  

 

寫在最后

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

 相關推薦:

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM