java的MybatisPlus調(diào)用儲(chǔ)存過(guò)程的返回?cái)?shù)據(jù)問(wèn)題
1.調(diào)用存儲(chǔ)過(guò)程
核心 statementType=”CALLABLE”
- mybatis調(diào)用存儲(chǔ)過(guò)程時(shí)需要指定statementType=”CALLABLE”,
- 這樣Mybatis內(nèi)部中調(diào)用sql語(yǔ)句時(shí)將采用CallableStatementHandler,
- 而CallableStatementHandler內(nèi)部將使用CallableStatement來(lái)調(diào)用存儲(chǔ)過(guò)程。
如果存儲(chǔ)過(guò)程是有參數(shù)的,需要指定mode屬性,可選值有IN、OUT和INOUT。
當(dāng)mode為OUT或INOUT時(shí)必須同時(shí)指定jdbcType。
如下:
<select id="findName" statementType="CALLABLE" resultType="java.util.Map">
{call findName(
#{name, mode=IN, jdbcType=VARCHAR},
#{email, mode=OUT, jdbcType=VARCHAR}
)}
</select>
或者
注意的問(wèn)題:
每個(gè)#{}之間不能分行寫,因?yàn)榉g過(guò)來(lái)會(huì)有空格,會(huì)報(bào)錯(cuò)。
最好寫在一行吧,免得麻煩,就是不好看而已。
<!-- statementType 聲明指向的是什么類型,其中CALLABLE是執(zhí)行存儲(chǔ)過(guò)程和函數(shù)的 -->
<select id="callProcedure" parameterType="map" statementType="CALLABLE">
{call PRO_GRAP(#{tabletag,mode=IN,jdbcType=VARCHAR},#{startdate,mode=IN,jdbcType=VARCHAR},#{enddate,mode=IN,jdbcType=VARCHAR})}
</select>
2.測(cè)試調(diào)用
或者postman 請(qǐng)求,傳遞參數(shù)map
存儲(chǔ)過(guò)程調(diào)用完成后會(huì)把輸出參數(shù)賦值給入?yún)ⅲ晕覀兛梢酝ㄟ^(guò)Map或?qū)嶓w類來(lái)接收輸出參數(shù),比如這里的name。
所以針對(duì)上述存儲(chǔ)過(guò)程調(diào)用,我們可以在Mapper接口中定義如下方法:
測(cè)試:
@Test
public void callStatement() {
Map<String, Object> map = new HashMap<String, Object>();
map.put("name", "zxn");
try {
userEmailMapper.findName(map);
} catch (Exception e) {
e.printStackTrace();
}
System.out.println(“execute=”+map.get("email"));
}
/**
* 參數(shù)和結(jié)果都在params中
* @param params
*/
void findName(Map<String, Object> params);
3.存儲(chǔ)過(guò)程示例
DROP PROCEDURE IF EXISTS findName; //如果存儲(chǔ)過(guò)程存在,先刪除掉存儲(chǔ)過(guò)程 CREATE PROCEDURE findName(IN `name` varchar(200),OUT `email_address` varchar(255)), SELECT `a`.`email` INTO email from user a WHERE `a`.`name`=`name`; END
4.驗(yàn)證結(jié)果
輸出查詢出來(lái)的信息


總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
SpringMVC 通過(guò)ajax 實(shí)現(xiàn)文件上傳的步驟
使用form表單在springmvc 項(xiàng)目中上傳文件,文件上傳成功之后往往會(huì)跳轉(zhuǎn)到其他的頁(yè)面,但是有的時(shí)候,文件上傳成功的同時(shí),并不需要進(jìn)行頁(yè)面的跳轉(zhuǎn),可以通過(guò)ajax來(lái)實(shí)現(xiàn)文件的上傳,下面給大家介紹SpringMVC 通過(guò)ajax 實(shí)現(xiàn)文件上傳的步驟,感興趣的朋友一起看看吧2025-05-05
springboot 多環(huán)境配置 yml文件版的實(shí)現(xiàn)方法
這篇文章主要介紹了springboot 多環(huán)境配置 yml文件版的實(shí)現(xiàn)方法,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-06-06
Spring與Mybatis相結(jié)合實(shí)現(xiàn)多數(shù)據(jù)源切換功能
這篇文章主要介紹了Spring與Mybatis相結(jié)合實(shí)現(xiàn)多數(shù)據(jù)源切換功能的相關(guān)資料,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下2016-06-06
Spring?IOC容器Bean注解創(chuàng)建對(duì)象組件掃描
這篇文章主要為大家介紹了Spring?IOC容器Bean注解創(chuàng)建對(duì)象組件掃描,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-05-05
centos下編譯安裝mysql報(bào)錯(cuò)解決方案
今天在centos6.2下面源碼編譯安裝mysql的時(shí),在編譯mysql的時(shí)候報(bào)了一個(gè)蛋蛋的錯(cuò)誤,本文提供詳細(xì)解決方案2012-11-11

