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

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:验证结果,输出查询出来的信息
在这里插入图片描述
在这里插入图片描述

  • 1
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
Mybatis-Plus可以通过注解或XML方式调用存储过程。以下是使用XML方式调用存储过程的示例: 1. 定义存储过程 假设我们有一个名为`proc_get_user`的存储过程,它接收一个`id`参数,并返回一个`User`对象。我们可以在数据库中定义这个存储过程。 2. 编写Mapper接口 在Mapper接口中定义调用存储过程的方法,使用`@Select`注解来指定要调用的存储过程和传入的参数。例如: ```java @Mapper public interface UserMapper extends BaseMapper<User> { @Select("CALL proc_get_user(#{id, mode=IN, jdbcType=INTEGER}, #{name, mode=OUT, jdbcType=VARCHAR})") void callProcedure(Map<String, Object> params); } ``` 在上面的代码中,我们使用`@Select`注解指定要调用的存储过程,并使用`Map`类型的参数来传入参数和接收返回值。 3. 调用存储过程 在代码中调用存储过程的方法如下所示: ```java @Autowired private UserMapper userMapper; public void getUserById(int id) { Map<String, Object> params = new HashMap<>(); params.put("id", id); params.put("name", null); userMapper.callProcedure(params); String name = (String) params.get("name"); // TODO: 处理返回值 } ``` 在上面的代码中,我们首先创建一个`Map`类型的参数对象,并设置存储过程的输入参数`id`。然后调用`userMapper.callProcedure(params)`方法来执行存储过程,并将输出参数`name`的值从`Map`对象中取出来。 这样就完成了使用Mybatis-Plus调用存储过程过程。需要注意的是,存储过程的参数要和Mapper接口中定义的参数一致,否则会出现参数不匹配的错误。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值