1. 程式人生 > >MyBatis呼叫帶有返回結果之output引數型別的儲存過程

MyBatis呼叫帶有返回結果之output引數型別的儲存過程

儲存過程示例:

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的區別

MyBatis呼叫儲存過程,含有返回結果集、return引數和output引數

MyBatis呼叫儲存過程之含有返回結果集、return引數和output引數