java的MybatisPlus调用储存过程的返回数据问题

 更新时间:2023年12月13日 17:06:46   作者:kangfu_521  
这篇文章主要介绍了java的MybatisPlus调用储存过程的返回数据问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

1.调用存储过程

核心 statementType=”CALLABLE”

  • mybatis调用存储过程时需要指定statementType=”CALLABLE”,
  • 这样Mybatis内部中调用sql语句时将采用CallableStatementHandler,
  • 而CallableStatementHandler内部将使用CallableStatement来调用存储过程。

如果存储过程是有参数的,需要指定mode属性,可选值有IN、OUT和INOUT。

当mode为OUT或INOUT时必须同时指定jdbcType。

如下:

<select id="findName" statementType="CALLABLE" resultType="java.util.Map">
    {call findName(
        #{name, mode=IN, jdbcType=VARCHAR},
        #{email, mode=OUT, jdbcType=VARCHAR}
    )}
   </select>

或者

注意的问题:

每个#{}之间不能分行写,因为翻译过来会有空格,会报错。

最好写在一行吧,免得麻烦,就是不好看而已。

<!-- statementType 声明指向的是什么类型,其中CALLABLE是执行存储过程和函数的 -->
    <select id="callProcedure" parameterType="map" statementType="CALLABLE"> 
        {call PRO_GRAP(#{tabletag,mode=IN,jdbcType=VARCHAR},#{startdate,mode=IN,jdbcType=VARCHAR},#{enddate,mode=IN,jdbcType=VARCHAR})}
    </select>

2.测试调用

或者postman 请求,传递参数map

存储过程调用完成后会把输出参数赋值给入参,所以我们可以通过Map或实体类来接收输出参数,比如这里的name。

所以针对上述存储过程调用,我们可以在Mapper接口中定义如下方法:

测试:

        @Test	
	public void  callStatement() {
		Map<String, Object> map = new HashMap<String, Object>();
		map.put("name", "zxn");
		try {
			userEmailMapper.findName(map);
		} catch (Exception e) {
			e.printStackTrace();
		}
		System.out.println(“execute=”+map.get("email"));
	}
/**
     * 参数和结果都在params中
     * @param params
     */
    void findName(Map<String, Object> params);

3.存储过程示例

DROP PROCEDURE IF EXISTS findName;      //如果存储过程存在,先删除掉存储过程
CREATE PROCEDURE findName(IN `name` varchar(200),OUT `email_address` varchar(255)),
SELECT `a`.`email` INTO email from user a WHERE `a`.`name`=`name`;	
END

4.验证结果

输出查询出来的信息

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • Java8中Stream API的peek()方法详解及需要注意的坑

    Java8中Stream API的peek()方法详解及需要注意的坑

    这篇文章主要给大家介绍了关于Java8中Stream API的peek()方法详解及需要注意的坑,Java 中的 peek 方法是 Java 8 中的 Stream API 中的一个方法,它属于中间操作,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2024-06-06
  • Springboot整合Netty实现RPC服务器的示例代码

    Springboot整合Netty实现RPC服务器的示例代码

    这篇文章主要介绍了Springboot整合Netty实现RPC服务器的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-01-01
  • java socket长连接中解决read阻塞的3个办法

    java socket长连接中解决read阻塞的3个办法

    这篇文章主要介绍了java socket长连接中解决read阻塞的3个办法,本文取了折中的一个方法,并给出代码实例,需要的朋友可以参考下
    2014-08-08
  • mybatis一对多方式实现批量插入

    mybatis一对多方式实现批量插入

    这篇文章主要介绍了mybatis一对多方式实现批量插入,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-11-11
  • java简单操作word实例

    java简单操作word实例

    这篇文章主要为大家详细介绍了java简单操作word实例,感兴趣的朋友可以参考一下
    2016-03-03
  • Java Annotation(Java 注解)的实现代码

    Java Annotation(Java 注解)的实现代码

    本篇文章介绍了,Java Annotation(Java 注解)的实现代码。需要的朋友参考下
    2013-05-05
  • Java进阶之Object类及常用方法详解

    Java进阶之Object类及常用方法详解

    Object 类是 Java 默认提供的一个类,是所有 Java 类的祖先类,每个类都使用 Object 作为父类。本文就来和大家聊聊Object类的常用方法,希望对大家有所帮助
    2023-01-01
  • 简单了解Java程序运行整体流程

    简单了解Java程序运行整体流程

    这篇文章主要介绍了简单了解Java程序运行整体流程,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-07-07
  • Java设计模式笔记之Builder模式

    Java设计模式笔记之Builder模式

    建造者模式是日常开发中比较常见的设计模式,它的主要作用就是将复杂事物创建的过程抽象出来,该抽象的不同实现方式不同,创建出的对象也不同,这篇文章主要给大家介绍了关于Java设计模式笔记之Builder模式的相关资料,需要的朋友可以参考下
    2022-03-03
  • 详谈java 堆区、方法区和栈区

    详谈java 堆区、方法区和栈区

    下面小编就为大家带来一篇详谈java 堆区、方法区和栈区。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-05-05

最新评论