MyBatis呼叫帶有返回結果之output引數型別的儲存過程
阿新 • • 發佈:2018-11-07
儲存過程示例:
ALTER PROCEDURE [WebApi_Login_SendPhoneCode ] ( @Action int, --1:查詢 2:新增一條記錄 @PhoneNo varchar(20), @Smscode varchar(10), @SendType varchar(10), @SendMsg varchar(200), @DeviceType varchar(20), @DeviceId varchar(50), @Ip varchar(25)='127.0.0.1', @Uid INT = 0 , @Ret int OUTPUT ) AS BEGIN -- 省略相關業務與sql處理內容 END;
Mybatis 的mapper.xml的示例:
<!--output引數會自動將值對映到請求引數的物件屬性中去,所以可以不需要resultType--> <select id="getSetPhoneCodeRecord" statementType="CALLABLE" parameterType="com.finance.model.PhoneCodeRecord" resultType="java.lang.Integer"> EXEC WebApi_Login_SendPhoneCode #{Action},#{PhoneNo},#{SmsCode},#{SendType},#{SendMsg},#{DeviceType},#{DeviceId},#{Ip},#{Uid},#{Ret,jdbcType=INTEGER,mode=OUT} </select>
java 程式碼示例:
//呼叫儲存過程
UserMapper userMapper = (UserMapper) baseMapper;
userMapper.getSetPhoneCodeRecord(phoneCodeRecord);
Integer isCanSendMsg = phoneCodeRecord.getRet();
Mybatis中javaType和jdbcType對應關係
JDBCType JavaType CHAR String VARCHAR String LONGVARCHAR String NUMERIC java.math.BigDecimal DECIMAL java.math.BigDecimal BIT boolean BOOLEAN boolean TINYINT byte SMALLINT short INTEGER int BIGINT long REAL float FLOAT double DOUBLE double BINARY byte[] VARBINARY byte[] LONGVARBINARY byte[] DATE java.sql.Date TIME java.sql.Time TIMESTAMP java.sql.Timestamp CLOB Clob BLOB Blob ARRAY Array DISTINCT mapping of underlying type STRUCT Struct REF Ref DATALINK java.net.URL[color=red][/color]
需要注意的事項:
1、 儲存過程的引數和名稱無關,只和引數的順序有關係
2、 儲存過程的output引數,只能通過傳入的map或實體類物件獲取
3、 儲存過程返回的結果集可直接用返回的map或者list接收
4、 儲存過程的return結果需要使用?=call procName(?,?)的第一個引數接收,需要指定對應的mode為OUT型別
5、 儲存過程對應的資料型別為列舉型別,需要使用大寫,如VARCHAR
相關博文推薦:
MyBatis呼叫帶有返回結果、output引數的儲存過程上與ibatis的區別