Mybatis 使用@select注解调用带输出参数的存储过程

 @Options(statementType = StatementType.CALLABLE)
 @Select("{Call procdure_name(" +
         "#{map.name,mode=OUT,jdbcType=INTEGER}," +
         "#{map.password,mode=OUT,jdbcType=INTEGER}," +
         "#{map.total,mode=OUT,jdbcType=INTEGER})}")
void   getXXXXX(Map<String,Object> map);

 

//调用

Map<String, Object> map=new HashMap<>();
XXXXMapper.getXXXXX(map);
Map<String, Integer> totalMap = (Map<String, Integer>) map.get("map");//map获取
Integer total = totalMap.get("total");//key值与传参时一致
Integer name= totalMap.get("name");
Integer password= totalMap.get("password");

 

 

注意点:

 

1、@options:statementType.CallAble 必须声明,告诉程序这是要执行存储过程,否则会报,main找不到

 

2、有两种方式带参:$”#”

 

主要区别就是#带双引号,$不带

 

例如:#{id}代表'id'${id}代表id

 

第二种因为传一个参数是可以省略@Param("")的,但是这种情况下不能使用${},

 

传两个参数以上时,必须要写@Param("")

 

3、 存储过程的output参数,只能通过传入的map获取参数,使用map.XXX ;

 

输出参数 设置mode=OUT ,jdbcTypeSQL中存储过程类型一致。

 

4、存储过程对应的数据类型为枚举类型,需要使用大写,如VARCHAR

 

5、存储过程返回的结果集可直接用返回的map接收

 

 

 

 

 

参考文献:

 

mybatis调用mysql存储过程(返回参数,单结果集,多结果集)

 

原文地址:https://www.cnblogs.com/xiqoqu/p/13879711.html