mybatis call存储过程调用及out的参数问题

 更新时间:2025年10月09日 11:53:13   作者:悟能不能悟  
在 MyBatis 中调用存储过程并获取 OUT 参数,需通过 XML 映射文件或注解方式实现,下面通过本文给大家介绍mybatis call存储过程调用及out的参数问题,感兴趣的朋友一起看看吧

在 MyBatis 中调用存储过程并获取 OUT 参数,需通过 XML 映射文件或注解方式实现。以下是详细步骤和示例:

​核心步骤​

  • Mapper 接口定义​:使用 Map或实体类接收参数
  • XML 映射文件​:使用 <select>标签声明 statementType="CALLABLE"
  • 参数设置​:通过 mode=OUT指定输出参数
  • 获取结果​:调用后从参数对象中提取 OUT 值

​示例代码​

1. Mapper 接口

public interface ProcedureMapper {
    void callProcedure(Map<String, Object> params); // 使用 Map 接收参数
}

2. XML 映射文件

<select id="callProcedure" statementType="CALLABLE">
    {call your_procedure_name(
        #{param1, mode=IN, jdbcType=INTEGER},   <!-- 输入参数 -->
        #{outParam, mode=OUT, jdbcType=INTEGER} <!-- 输出参数 -->
    )}
</select>

3. Java 调用代码

Map<String, Object> params = new HashMap<>();
params.put("param1", 100); // 设置输入参数
procedureMapper.callProcedure(params);
// 获取 OUT 参数值
Integer outValue = (Integer) params.get("outParam");
System.out.println("OUT 参数值: " + outValue);

​使用实体类代替 Map​

实体类定义

@Data // Lombok 注解,自动生成 getter/setter
public class ProcParams {
    private Integer param1;     // IN 参数
    private Integer outParam;   // OUT 参数(MyBatis 会自动填充)
}

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>

调用方式

ProcParams params = new ProcParams();
params.setParam1(100);
procedureMapper.callProcedure(params);
// 直接通过实体类获取 OUT 值
System.out.println("OUT 参数值: " + params.getOutParam());

​关键注意事项​

  • 参数模式​:必须明确指定 mode=OUTmode=INOUT
  • JDBC 类型​:通过 jdbcType指定数据库类型(如 VARCHAR, INTEGER
  • 存储过程语法​:使用 {call proc_name(...)}格式
  • 事务控制​:确保操作在事务中执行(如添加 @Transactional

​常见问题排查​

  • 问题​:OUT 参数值为 null
  • 解决​:检查参数名是否与存储过程声明一致,确认 jdbcType匹配数据库类型。
  • 问题​:类型转换异常
  • 解决​:在 OUT 参数中显式指定 javaType(如 #{outParam, mode=OUT, jdbcType=INTEGER, javaType=Integer})。
  • 问题​:存储过程未执行
  • 解决​:检查 MyBatis 日志,确认 SQL 语法是否正确(尤其注意 {call ...}的括号匹配)。

通过以上步骤,即可在 MyBatis 中安全获取存储过程的 OUT 参数值。实际使用时,请替换存储过程名和参数名为实际值。

到此这篇关于mybatis call存储过程调用及out的参数问题的文章就介绍到这了,更多相关mybatis call存储过程内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Spring Boot使用注解重构IoC容器的实战示例

    Spring Boot使用注解重构IoC容器的实战示例

    这篇文章给大家介绍Spring Boot使用注解重构IoC容器的实战示例,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧
    2025-09-09
  • Mybatis的Mapper中的方法为什么不能重载

    Mybatis的Mapper中的方法为什么不能重载

    这篇文章主要介绍了Mybatis的Mapper中的方法为什么不能重载,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-09-09
  • java GUI编程之监听操作实例分析

    java GUI编程之监听操作实例分析

    这篇文章主要介绍了java GUI编程之监听操作,结合实例形式分析了java GUI编程监听操作的Button监听、TextField文本输入监听等相关操作技巧与注意事项,需要的朋友可以参考下
    2020-01-01
  • java中Iterator和ListIterator实例详解

    java中Iterator和ListIterator实例详解

    这篇文章主要介绍了java中Iterator和ListIterator实例详解,具有一定借鉴价值,需要的朋友可以参考下。
    2017-12-12
  • Java文档注释用法+JavaDoc的使用说明

    Java文档注释用法+JavaDoc的使用说明

    这篇文章主要介绍了Java文档注释用法+JavaDoc的使用说明,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-07-07
  • Java程序员常犯的五个错误

    Java程序员常犯的五个错误

    这篇文章总结以前经验针对java编程的一些习惯,给出一些关于java编程的建议: 当你开始成为一个程序员的时候,在编程的时候很容易陷入下面所述的一些坏习惯,下面把Java程序员常犯的五个错误整理如下,需要的朋友可以参考下
    2015-07-07
  • 简单介绍java中equals以及==的用法

    简单介绍java中equals以及==的用法

    这篇文章主要介绍了简单介绍java中equals以及==的用法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-01-01
  • Springboot整合Redis最简单例子分享

    Springboot整合Redis最简单例子分享

    这篇文章主要介绍了Springboot整合Redis最简单例子分享,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-10-10
  • Springboot的ThreadPoolTaskScheduler线程池轻松搞定15分钟不操作自动取消订单

    Springboot的ThreadPoolTaskScheduler线程池轻松搞定15分钟不操作自动取消订单

    这篇文章主要介绍了Springboot的ThreadPoolTaskScheduler线程池轻松搞定15分钟不操作自动取消订单,本文给大家介绍的非常详细,需要的朋友可以参考下
    2025-01-01
  • SpringBoot超详细讲解Thymeleaf模板引擎

    SpringBoot超详细讲解Thymeleaf模板引擎

    这篇文章主要分享了Spring Boot整合使用Thymeleaf,Thymeleaf是新一代的Java模板引擎,类似于Velocity、FreeMarker等传统引擎,关于其更多相关内容,需要的小伙伴可以参考一下
    2022-07-07

最新评论