在用mybatis調用數據庫的存儲過程時,我發現有時即便mybatis失敗了,乃至存儲過程異常了。mybatis也不會拋出異常,下面是處理這種狀況的方法sql
1. 有以下存儲過程( sqlServer 2012)數據庫
USE [WES] GO SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO ALTER PROCEDURE [dbo].[Pros_CreateMessage] @id varchar(50) = '', @senderId varchar(50) = 'A0000001', @type int AS BEGIN SET NOCOUNT ON; BEGIN TRAN BEGIN TRY --存儲過程具體實現代碼..... set @result = 1 --若是成功就返回的結果 COMMIT TRAN END TRY BEGIN CATCH ROLLBACK TRAN print(ERROR_MESSAGE()) set @result = ERROR_MESSAGE() --失敗就將異常拋出,到時mybatis就會收到 end catch select @result as succeed --正常結束時就返回@result END
只要將ERROR_MESSAGE()作爲返回值,到時mybatis自動就會拋出異常了mybatis
2. mybatis存儲過程的調用 code
<select id="xxx" resultType="int" parameterType="map" statementType="CALLABLE" flushCache="true"> {call Pros_CreateMessage(#{id,mode=In,jdbcType=VARCHAR},#{senderId,mode=In,jdbcType=VARCHAR})} </select>