spring boot mybatis中 !--通过受理类别、受理组别生成当前最大流水号的受理编号-- !--执行存储过程获取输出参数 outerApplyId 的值-- select idgenerateOuterApplyId resultTypejava.lang.Object parameterTypejava.util.HashMap statementTypeCALLABLE execute proc_generateOuterApplyId #{acceptType}, #{acceptGroupId}, #{outerApplyId,modeOUT,jdbcTypeVARCHAR} /select 如果是执行没有返回数据集的存储过程又应该如何编写相关代码对于执行没有返回数据集即不返回任何结果集的存储过程核心区别在于不需要接收输出参数只需执行存储过程语句并传入输入参数。MyBatis 依然使用statementTypeCALLABLE但标签建议选用update而不是select因为这类操作本质上是数据变更update语义更清晰且不影响事务边界。1. 存储过程无任何输出参数仅输入参数假设存储过程定义为sqlPROCEDURE proc_update_status( IN p_accept_type VARCHAR(10), IN p_group_id INT )Mapper XMLxmlupdate idupdateStatus statementTypeCALLABLE parameterTypemap execute proc_update_status( #{acceptType, jdbcTypeVARCHAR}, #{acceptGroupId, jdbcTypeINTEGER} ) /update或使用标准的 JDBC 调用语法xmlupdate idupdateStatus statementTypeCALLABLE parameterTypemap {call proc_update_status( #{acceptType, jdbcTypeVARCHAR}, #{acceptGroupId, jdbcTypeINTEGER} )} /updateMapper 接口方法javavoid updateStatus(Param(acceptType) String acceptType, Param(acceptGroupId) Integer acceptGroupId); // 或使用 Map 参数 void updateStatus(MapString, Object params);调用后直接执行无返回值。2. 存储过程既有输入参数也有输出参数但仍无结果集如果存储过程本身不返回数据集但需要获取输出参数的值则必须使用modeOUT定义输出参数并从传入的Map或Param对象中获取。示例存储过程sqlPROCEDURE proc_generate_code( IN p_type VARCHAR(10), IN p_group INT, OUT p_code VARCHAR(20) )Mapper XMLxmlselect idgenerateCode resultTypestring statementTypeCALLABLE parameterTypemap execute proc_generate_code( #{acceptType, jdbcTypeVARCHAR}, #{acceptGroupId, jdbcTypeINTEGER}, #{code, modeOUT, jdbcTypeVARCHAR} ) /select注意因为要获取输出参数通常仍使用select且可以声明resultType这里的resultType其实是存储过程本身的返回值不是输出参数输出参数需通过入参对象获取。Mapper 接口方法javavoid generateCode(MapString, Object params); // 或 String generateCode(Param(acceptType) String acceptType, Param(acceptGroupId) Integer acceptGroupId, Param(code) String[] codeHolder); // 使用数组/引用类型接收输出调用示例javaMapString, Object params new HashMap(); params.put(acceptType, 01); params.put(acceptGroupId, 100); mapper.generateCode(params); String code (String) params.get(code); // 获取输出参数值3. 存储过程既无结果集也无输出参数但有返回值某些数据库如 MySQL支持存储函数FUNCTION或者存储过程可以通过? call proc()返回单值。此时需用jdbcType定义返回值位置。示例MySQL 函数sqlFUNCTION func_calc(a INT, b INT) RETURNS INTMapper XMLxmlselect idcalc resultTypeint statementTypeCALLABLE { #{result, modeOUT, jdbcTypeINTEGER} call func_calc( #{a, jdbcTypeINTEGER}, #{b, jdbcTypeINTEGER} )} /select或使用update但配合resultType不推荐。✅ 总结建议场景推荐标签输出参数处理接口返回值无返回数据集无输出参数update不定义modeOUTvoid无返回数据集但有输出参数select定义modeOUT从参数取void存储函数或? call形式单值返回select定义modeOUT特殊位置resultType定义类型关键点无论是否有输出参数statementTypeCALLABLE都必须设置。输出参数的值不会作为 MyBatis 方法返回值必须通过传入的Map或数组对象在调用后获取。对于纯粹的数据变更类存储过程无输出优先使用update标签语义更准确。这样你就能根据存储过程的具体特征灵活选择配置方式了。