溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

mybatis怎么調(diào)用mysql存儲過程并獲取返回值

發(fā)布時間:2022-08-24 16:41:20 來源:億速云 閱讀:282 作者:iii 欄目:開發(fā)技術(shù)

本文小編為大家詳細介紹“mybatis怎么調(diào)用mysql存儲過程并獲取返回值”,內(nèi)容詳細,步驟清晰,細節(jié)處理妥當,希望這篇“mybatis怎么調(diào)用mysql存儲過程并獲取返回值”文章能幫助大家解決疑惑,下面跟著小編的思路慢慢深入,一起來學習新知識吧。

mybatis調(diào)用mysql存儲過程并獲取返回值

1、mysql創(chuàng)建存儲過程

#結(jié)束符號默認;, delimiter $$語句表示結(jié)束符號變更為$$
delimiter $$
CREATE PROCEDURE `demo`(IN inStr VARCHAR(100), out ourStr VARCHAR(4000))
BEGIN

SET ourStr = '01';
if (inStr == '02') then
    set ourStr = '02';
end if;

END$$
#結(jié)束符號修改
delimiter ;

2、mybatis調(diào)用

(1)注解方式

// key1和key2都是參數(shù)map中的key
// key1是需要傳入存儲過程的值
// key2是用于接收存儲過程返回的值,跟獲取自增主鍵類似
@Select("call demo('${key1}', #{key2, mode=OUT, jdbcType=VARCHAR})")
@Options(statementType = StatementType.CALLABLE)
String getDemoValue(Map<String, Object> map);

(2)xml方式

 <select id="getDemoValue" resultType="java.lang.String" parameterType="java.util.Map" statementType="CALLABLE">
     call demo('${key1}', #{key2, mode=OUT, jdbcType=VARCHAR})
 </select>

mybatis調(diào)存儲過程遇到返回值null的坑

mybatis調(diào)存儲過程時返回值null

就簡單的一個存儲過程

BEGIN
   #SELECT COUNT(*) scount FROM test_user t WHERE t.user_sex=sex;
   SELECT user_name userName FROM test_user t WHERE t.user_sex=sex;
END

然后在Mybatis Mapper配置文件中

 <!--存儲過程  輸入?yún)?shù)用Map -->
  <select id="queryCountBySexWithProcedure" statementType="CALLABLE" parameterType="java.util.Map" resultType="java.util.HashMap">
      {
           CALL queryCountBySexWithProcedure(
              #{sex,jdbcType=VARCHAR,mode=IN},
              #{userName,jdbcType=VARCHAR,mode=OUT}
           )
    }
  </select>

然后userName值null,這是為什么呢?在mapper.xml文件會做映射處理,而在存儲過程中下方標紅的屬性 user_name并不會自動映射到userName 值中,所以調(diào)用userName值一定返回null。

BEGIN
   #SELECT COUNT(*) scount FROM test_user t WHERE t.user_sex=sex;
   SELECT user_name userName FROM test_user t WHERE t.user_sex=sex;
END

那怎么處理這樣問題呢?那就是加上INTO 關(guān)鍵字

BEGIN
    #SELECT COUNT(*) scount FROM test_user t WHERE t.user_sex=sex;
         SELECT user_name INTO userName FROM test_user t WHERE t.user_sex=sex;
END

讀到這里,這篇“mybatis怎么調(diào)用mysql存儲過程并獲取返回值”文章已經(jīng)介紹完畢,想要掌握這篇文章的知識點還需要大家自己動手實踐使用過才能領(lǐng)會,如果想了解更多相關(guān)內(nèi)容的文章,歡迎關(guān)注億速云行業(yè)資訊頻道。

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI