当前位置: 首页 > news >正文

Mybatis 执行存储过程(没有返回数据集)

spring boot + mybatis中 <!--通过受理类别、受理组别,生成当前最大流水号的受理编号--> <!--执行存储过程,获取输出参数 outerApplyId 的值--> <select id="generateOuterApplyId" resultType="java.lang.Object" parameterType="java.util.HashMap" statementType="CALLABLE"> execute proc_generateOuterApplyId #{acceptType}, #{acceptGroupId}, #{outerApplyId,mode=OUT,jdbcType=VARCHAR} </select> 如果是执行没有返回数据集的存储过程,又应该如何编写相关代码?

对于执行没有返回数据集(即不返回任何结果集)的存储过程,核心区别在于不需要接收输出参数,只需执行存储过程语句并传入输入参数。MyBatis 依然使用statementType="CALLABLE",但标签建议选用<update>而不是<select>,因为这类操作本质上是数据变更,<update>语义更清晰且不影响事务边界。


1. 存储过程无任何输出参数(仅输入参数)

假设存储过程定义为:

sql

PROCEDURE proc_update_status( IN p_accept_type VARCHAR(10), IN p_group_id INT )

Mapper XML

xml

<update id="updateStatus" statementType="CALLABLE" parameterType="map"> execute proc_update_status( #{acceptType, jdbcType=VARCHAR}, #{acceptGroupId, jdbcType=INTEGER} ) </update>

或使用标准的 JDBC 调用语法:

xml

<update id="updateStatus" statementType="CALLABLE" parameterType="map"> {call proc_update_status( #{acceptType, jdbcType=VARCHAR}, #{acceptGroupId, jdbcType=INTEGER} )} </update>

Mapper 接口方法

java

void updateStatus(@Param("acceptType") String acceptType, @Param("acceptGroupId") Integer acceptGroupId); // 或使用 Map 参数 void updateStatus(Map<String, Object> params);

调用后直接执行,无返回值。


2. 存储过程既有输入参数,也有输出参数(但仍无结果集)

如果存储过程本身不返回数据集,但需要获取输出参数的值,则必须使用mode=OUT定义输出参数,并从传入的Map@Param对象中获取。

示例存储过程:

sql

PROCEDURE proc_generate_code( IN p_type VARCHAR(10), IN p_group INT, OUT p_code VARCHAR(20) )

Mapper XML

xml

<select id="generateCode" resultType="string" statementType="CALLABLE" parameterType="map"> execute proc_generate_code( #{acceptType, jdbcType=VARCHAR}, #{acceptGroupId, jdbcType=INTEGER}, #{code, mode=OUT, jdbcType=VARCHAR} ) </select>

注意:因为要获取输出参数,通常仍使用<select>,且可以声明resultType(这里的resultType其实是存储过程本身的返回值,不是输出参数;输出参数需通过入参对象获取)。

Mapper 接口方法

java

void generateCode(Map<String, Object> params); // 或 String generateCode(@Param("acceptType") String acceptType, @Param("acceptGroupId") Integer acceptGroupId, @Param("code") String[] codeHolder); // 使用数组/引用类型接收输出

调用示例

java

Map<String, 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 函数):

sql

FUNCTION func_calc(a INT, b INT) RETURNS INT

Mapper XML

xml

<select id="calc" resultType="int" statementType="CALLABLE"> { #{result, mode=OUT, jdbcType=INTEGER} = call func_calc( #{a, jdbcType=INTEGER}, #{b, jdbcType=INTEGER} )} </select>

或使用<update>但配合resultType不推荐。


✅ 总结建议

场景推荐标签输出参数处理接口返回值
无返回数据集,无输出参数<update>不定义mode=OUTvoid
无返回数据集,但有输出参数<select>定义mode=OUT,从参数取void
存储函数或? = call形式(单值返回)<select>定义mode=OUT特殊位置resultType定义类型

关键点

  • 无论是否有输出参数,statementType="CALLABLE"都必须设置。

  • 输出参数的值不会作为 MyBatis 方法返回值,必须通过传入的Map或数组对象在调用后获取。

  • 对于纯粹的数据变更类存储过程(无输出),优先使用<update>标签,语义更准确。

这样,你就能根据存储过程的具体特征灵活选择配置方式了。

http://www.jsqmd.com/news/376876/

相关文章:

  • 探寻四川钻石全能高基板实力厂商:2026年五大可靠选择解析 - 2026年企业推荐榜
  • 微信小程序调用EasyAnimateV5云函数:移动端视频生成方案
  • mPLUG视觉问答性能实测:对比云端方案的响应速度与精度
  • MogFace实测:高精度检测遮挡/极端姿态人脸效果展示
  • 2026年方管铝型材公司权威推荐:异形铝型材/槽铝型材/氟碳喷涂铝型材/氧化铝型材/铝型材喷涂/铝型材圆管/铝管铝型材/选择指南 - 优质品牌商家
  • Qwen3-Reranker-0.6B实战教程:结合LLM生成Query扩展提升重排效果
  • Service层调用Mapper与Service原则
  • Java开发者指南:Pi0具身智能SDK集成教程
  • Qwen2.5-7B-Instruct部署教程:vLLM启用FlashAttention-2加速实测报告
  • 谷歌搜索结果自营化分析技术
  • 人脸识别新体验:Retinaface+CurricularFace实测分享
  • WuliArt Qwen-Image Turbo镜像免配置:开箱即用的本地文生图生产力工具
  • 2026年铝材铝型材公司权威推荐:开模铝型材/异形铝型材/方管铝型材/槽铝型材/氟碳喷涂铝型材/氧化铝型材/铝型材喷涂/选择指南 - 优质品牌商家
  • 小白必看:ollama上QwQ-32B的快速入门指南
  • 灵毓秀-牧神-造相Z-Turbo模型:新手友好的文生图解决方案
  • DeepSeek-OCR-2快速部署:阿里云/腾讯云GPU服务器一键安装脚本分享
  • DeepSeek-OCR-2惊艳案例:100页产品手册PDF→单个Markdown→VS Code大纲导航
  • 2026年降AI率平台深度横评:算法博弈下,谁才是“去机器味”的最优解? - 品牌观察员小捷
  • QWEN-AUDIO部署教程:NVIDIA驱动/CUDA/PyTorch版本严格匹配指南
  • DeepSeek-R1-Distill-Qwen-7B惊艳效果:Ollama本地运行下自动生成Markdown格式技术方案文档
  • translategemma-27b-it新手入门:Ollama部署与图片翻译体验
  • Jimeng AI Studio开源大模型:Z-Image-Turbo轻量级影像生成新范式
  • 造相Z-Image显存优化解析:24GB显卡稳定运行768×768生成
  • 代码优化神器coze-loop:5个真实案例教你快速上手
  • Pi0 Web演示界面详解:轻松实现机器人动作控制
  • VibeVoice与LangChain集成实战:构建智能语音助手应用
  • DCT-Net与Unity3D集成:虚拟形象生成方案
  • Z-Image Turbo生产环境落地:团队协作绘图平台搭建
  • Mirage Flow在VMware虚拟化环境中的部署方案
  • 2026年6mm冰火板厂家推荐:米白色冰火板、纯色冰火板、防火冰火板、阻燃冰火板、8mm冰火板、仿木纹冰火板、仿石纹冰火板选择指南 - 优质品牌商家