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 ,jdbcType与SQL中存储过程类型一致。
4、存储过程对应的数据类型为枚举类型,需要使用大写,如VARCHAR
5、存储过程返回的结果集可直接用返回的map接收
参考文献:
l mybatis调用mysql存储过程(返回参数,单结果集,多结果集)