mybatis call存儲(chǔ)過程調(diào)用及out的參數(shù)問題
在 MyBatis 中調(diào)用存儲(chǔ)過程并獲取 OUT 參數(shù),需通過 XML 映射文件或注解方式實(shí)現(xiàn)。以下是詳細(xì)步驟和示例:
?核心步驟?
- ?Mapper 接口定義?:使用
Map或?qū)嶓w類接收參數(shù) - ?XML 映射文件?:使用
<select>標(biāo)簽聲明statementType="CALLABLE" - ?參數(shù)設(shè)置?:通過
mode=OUT指定輸出參數(shù) - ?獲取結(jié)果?:調(diào)用后從參數(shù)對象中提取 OUT 值
?示例代碼?
1. Mapper 接口
public interface ProcedureMapper {
void callProcedure(Map<String, Object> params); // 使用 Map 接收參數(shù)
}2. XML 映射文件
<select id="callProcedure" statementType="CALLABLE">
{call your_procedure_name(
#{param1, mode=IN, jdbcType=INTEGER}, <!-- 輸入?yún)?shù) -->
#{outParam, mode=OUT, jdbcType=INTEGER} <!-- 輸出參數(shù) -->
)}
</select>3. Java 調(diào)用代碼
Map<String, Object> params = new HashMap<>();
params.put("param1", 100); // 設(shè)置輸入?yún)?shù)
procedureMapper.callProcedure(params);
// 獲取 OUT 參數(shù)值
Integer outValue = (Integer) params.get("outParam");
System.out.println("OUT 參數(shù)值: " + outValue);?使用實(shí)體類代替 Map?
實(shí)體類定義
@Data // Lombok 注解,自動(dòng)生成 getter/setter
public class ProcParams {
private Integer param1; // IN 參數(shù)
private Integer outParam; // OUT 參數(shù)(MyBatis 會(huì)自動(dòng)填充)
}Mapper 接口
void callProcedure(ProcParams params);
XML 映射文件
<select id="callProcedure" statementType="CALLABLE">
{call your_procedure_name(
#{param1, mode=IN, jdbcType=INTEGER},
#{outParam, mode=OUT, jdbcType=INTEGER}
)}
</select>調(diào)用方式
ProcParams params = new ProcParams();
params.setParam1(100);
procedureMapper.callProcedure(params);
// 直接通過實(shí)體類獲取 OUT 值
System.out.println("OUT 參數(shù)值: " + params.getOutParam());?關(guān)鍵注意事項(xiàng)?
- ?參數(shù)模式?:必須明確指定
mode=OUT或mode=INOUT - ?JDBC 類型?:通過
jdbcType指定數(shù)據(jù)庫類型(如VARCHAR,INTEGER) - ?存儲(chǔ)過程語法?:使用
{call proc_name(...)}格式 - ?事務(wù)控制?:確保操作在事務(wù)中執(zhí)行(如添加
@Transactional)
?常見問題排查?
- ?問題?:OUT 參數(shù)值為
null - ?解決?:檢查參數(shù)名是否與存儲(chǔ)過程聲明一致,確認(rèn)
jdbcType匹配數(shù)據(jù)庫類型。 - ?問題?:類型轉(zhuǎn)換異常
- ?解決?:在 OUT 參數(shù)中顯式指定
javaType(如#{outParam, mode=OUT, jdbcType=INTEGER, javaType=Integer})。 - ?問題?:存儲(chǔ)過程未執(zhí)行
- ?解決?:檢查 MyBatis 日志,確認(rèn) SQL 語法是否正確(尤其注意
{call ...}的括號(hào)匹配)。
通過以上步驟,即可在 MyBatis 中安全獲取存儲(chǔ)過程的 OUT 參數(shù)值。實(shí)際使用時(shí),請?zhí)鎿Q存儲(chǔ)過程名和參數(shù)名為實(shí)際值。
到此這篇關(guān)于mybatis call存儲(chǔ)過程調(diào)用及out的參數(shù)問題的文章就介紹到這了,更多相關(guān)mybatis call存儲(chǔ)過程內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- 關(guān)于mybatis callSettersOnNulls 配置解析
- mybatis調(diào)用存儲(chǔ)過程,帶in、out參數(shù)問題
- mybatis+lombok出現(xiàn)java.lang.IndexOutOfBoundsException錯(cuò)誤及解決
- 解決Mybatis出現(xiàn)報(bào)錯(cuò)Error querying database.Cause: java.lang.IndexOutOfBoundsException: Index 9 out of
- Mybatis批量插入index out of range錯(cuò)誤的解決(較偏的錯(cuò)誤)
相關(guān)文章
RocketMQ?offset確認(rèn)機(jī)制示例詳解
這篇文章主要為大家介紹了RocketMQ?offset確認(rèn)機(jī)制示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-09-09
解讀為什么不推薦使用keySet()進(jìn)行遍歷HashMap
這篇文章主要介紹了我為什么不推薦使用keySet()進(jìn)行遍歷HashMap的問題,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2025-05-05
SpringBoot中登錄驗(yàn)證碼的4種實(shí)現(xiàn)方案
這篇文章主要介紹了在SpringBoot應(yīng)用中實(shí)現(xiàn)四種登錄驗(yàn)證碼的技術(shù)方案,包括圖形驗(yàn)證碼、短信驗(yàn)證碼、郵箱驗(yàn)證碼和滑動(dòng)拼圖驗(yàn)證碼,需要的可以參考下2025-04-04
Maven中錯(cuò)誤使用parent.relativePath導(dǎo)致構(gòu)建失敗問題
這篇文章主要介紹了Maven中錯(cuò)誤使用parent.relativePath導(dǎo)致構(gòu)建失敗問題,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-08-08
Java實(shí)現(xiàn)給網(wǎng)站上傳圖片蓋章的方法
這篇文章主要介紹了Java實(shí)現(xiàn)給網(wǎng)站上傳圖片蓋章的方法,涉及java針對圖片的合成操作技巧,類似水印功能,需要的朋友可以參考下2015-07-07
一文詳解Java中的靜態(tài)變量是在“堆“還是“方法區(qū)“
在Java編程語言中,靜態(tài)變量和實(shí)例變量是兩種不同類型的成員變量,它們在內(nèi)存中的分配、生命周期、以及使用方式上有著顯著的區(qū)別,這篇文章主要介紹了Java中靜態(tài)變量是在“堆“還是“方法區(qū)“的相關(guān)資料,需要的朋友可以參考下2025-09-09
Java基礎(chǔ)之JDBC的數(shù)據(jù)庫連接與基本操作
這篇文章主要介紹了Java基礎(chǔ)之JDBC的數(shù)據(jù)庫連接與基本操作,文中有非常詳細(xì)的代碼示例,對正在學(xué)習(xí)java基礎(chǔ)的小伙伴們也有很好的幫助,需要的朋友可以參考下2021-05-05

