@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存儲過程(返回參數,單結果集,多結果集)