mybatis調用mysql存儲過程(返回參數(shù),單結果集,多結果集)
一、接收一個返回值
使用Map接收返回參數(shù),output參數(shù)放在傳入的param中
創(chuàng)建表
DROP TABLE IF EXISTS `demo`;
CREATE TABLE `demo` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(255) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=32 DEFAULT CHARSET=utf8;
-- ----------------------------
-- Records of demo
-- ----------------------------
INSERT INTO `demo` VALUES ('1', '測試');創(chuàng)建存儲過程
DROP PROCEDURE IF EXISTS pro; CREATE PROCEDURE pro ( IN userId INT, OUT userCount INT ) BEGIN DECLARE user_name VARCHAR (64); SELECT NAME FROM demo WHERE id = userId INTO user_name; INSERT INTO demo (NAME) VALUES (user_name); SELECT COUNT(*) FROM demo INTO userCount; END;
mapper.xml
<select id="procedureTest" parameterMap="pm" statementType="CALLABLE">
CALL pro(#{userId,mode=IN},#{userCount,mode=OUT,jdbcType=INTEGER});
</select>
<parameterMap id="pm" type="java.util.Map">
<parameter property="userId" jdbcType="INTEGER" mode="IN"></parameter>
<parameter property="userCount" jdbcType="INTEGER" mode="OUT"></parameter>
</parameterMap>service
@Override
public void procedureTest() {
Map<String, Object> param = new HashMap<>();
param.put("userId", "1");
demoMapper.procedureTest(param);
System.out.println("輸出結果是:"+param.get("userCount"));
}輸出結果
![]()

參數(shù)名不一定和存儲過程一樣,只和傳參順有關,使用下圖配置同樣可以獲取結果
System.out.println("輸出結果是:"+param.get("userCount_2"));
注意事項:
1、 存儲過程的參數(shù)和名稱無關,只和順序有關系
2、 存儲過程的output參數(shù),只能通過傳入的map獲取
3、 存儲過程返回的結果集可直接用返回的map接收
4、 存儲過程的return結果需要使用?=call procName(?,?)的第一個參數(shù)接收,需要指定對應的mode為OUT類型
5、 存儲過程對應的數(shù)據(jù)類型為枚舉類型,需要使用大寫,如VARCHAR
output是在存儲過程中的參數(shù)的返回值(輸出參數(shù)),而ReturnValue是存儲過程返回的值(使用return關鍵字),一個存儲過程可以有任意多個依靠參數(shù)返回的值,但只有一個ReturnValue。
存儲過程主要分成三類:
1、返回記錄集的存儲過程:執(zhí)行結果是一個記錄集,例如,從數(shù)據(jù)庫中檢索出符合某一個或幾個條件的記錄。
2、返回數(shù)值得的存儲過程(也可稱為標量存儲過程),其執(zhí)行完后返回一個值,例如數(shù)據(jù)庫中執(zhí)行一個有返回值的函數(shù)或命令。
3、行為存儲過程,用來實現(xiàn)數(shù)據(jù)庫的某個功能,而沒有返回值,例如在數(shù)據(jù)庫中的更新和刪除操作。
二、接收list結果集
使用list接收

@Override
public void procedureTest() {
Map<String, Object> param = new HashMap<>();
param.put("userId", "1");
List<?> list = demoMapper.procedureTest(param);
System.out.println("輸出結果是:" + param.get("userCount_2"));
System.out.println("輸出集合:" + list.size());
} <select id="procedureTest" parameterMap="pm" statementType="CALLABLE" resultMap="rm">
CALL pro(#{userId,mode=IN},#{userCount_2,mode=OUT,jdbcType=INTEGER});
</select>
<parameterMap id="pm" type="java.util.Map">
<parameter property="userId" jdbcType="INTEGER" mode="IN"></parameter>
<parameter property="userCount_2" jdbcType="INTEGER" mode="OUT"></parameter>
</parameterMap>
<resultMap id="rm" type="com.csstj.srm.entity.procedureTestEntity">
<result column="id" property="id"></result>
<result column="name" property="userName"></result>
</resultMap>三、返回多個結果集




四、第二種配置也可以
CALL s_generatePlan_new (
#{organizationId, mode=IN,jdbcType=VARCHAR},
#{gradeId, mode=IN,jdbcType=VARCHAR},
#{semesterId, mode=IN,jdbcType=VARCHAR},
#{className, mode=IN,jdbcType=VARCHAR},
#{employeeCode, mode=IN,jdbcType=VARCHAR},
#{courseName, mode=IN,jdbcType=VARCHAR},
#{classroomName, mode=IN,jdbcType=VARCHAR},
#{approverId, mode=IN,jdbcType=VARCHAR},
#{createBy, mode=IN,jdbcType=VARCHAR},
#{total,mode=OUT ,jdbcType=VARCHAR})到此這篇關于mybatis調用mysql存儲過程(返回參數(shù),單結果集,多結果集)的文章就介紹到這了,更多相關mybatis調用mysql存儲過程內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
mybatis主鍵自增,關聯(lián)查詢,動態(tài)sql方式
這篇文章主要介紹了mybatis主鍵自增,關聯(lián)查詢,動態(tài)sql方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2025-06-06
java使用list實現(xiàn)數(shù)據(jù)庫的like功能
這篇文章主要介紹了java使用list實現(xiàn)數(shù)據(jù)庫的like功能,需要的朋友可以參考下2014-04-04
java設計模式原型模式與享元模式調優(yōu)系統(tǒng)性能詳解
這篇文章主要為大家介紹了java設計模式原型模式與享元模式調優(yōu)系統(tǒng)性能方法詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-05-05
Spring接口版本控制方案及RequestMappingHandlerMapping接口介紹(最新推薦)
RequestMappingHandlerMapping接口是Spring MVC中的一個核心組件,負責處理請求映射和處理器的匹配這篇文章主要介紹了Spring接口版本控制方案及RequestMappingHandlerMapping接口介紹,需要的朋友可以參考下2024-07-07

