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ù)對(duì)象中提取 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)文章
Spring Boot使用注解重構(gòu)IoC容器的實(shí)戰(zhàn)示例
這篇文章給大家介紹Spring Boot使用注解重構(gòu)IoC容器的實(shí)戰(zhàn)示例,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧2025-09-09
java GUI編程之監(jiān)聽操作實(shí)例分析
這篇文章主要介紹了java GUI編程之監(jiān)聽操作,結(jié)合實(shí)例形式分析了java GUI編程監(jiān)聽操作的Button監(jiān)聽、TextField文本輸入監(jiān)聽等相關(guān)操作技巧與注意事項(xiàng),需要的朋友可以參考下2020-01-01
java中Iterator和ListIterator實(shí)例詳解
這篇文章主要介紹了java中Iterator和ListIterator實(shí)例詳解,具有一定借鑒價(jià)值,需要的朋友可以參考下。2017-12-12
Springboot的ThreadPoolTaskScheduler線程池輕松搞定15分鐘不操作自動(dòng)取消訂單
這篇文章主要介紹了Springboot的ThreadPoolTaskScheduler線程池輕松搞定15分鐘不操作自動(dòng)取消訂單,本文給大家介紹的非常詳細(xì),需要的朋友可以參考下2025-01-01
SpringBoot超詳細(xì)講解Thymeleaf模板引擎
這篇文章主要分享了Spring Boot整合使用Thymeleaf,Thymeleaf是新一代的Java模板引擎,類似于Velocity、FreeMarker等傳統(tǒng)引擎,關(guān)于其更多相關(guān)內(nèi)容,需要的小伙伴可以參考一下2022-07-07

