【mybatis】mybatis呼叫sqlserver儲存過程和表值函式
阿新 • • 發佈:2018-12-15
儲存過程和表值函式的區別
最簡單的區別是儲存過程是pr開頭的,而儲存過程是fn開頭的,表值函式返回的是一個表結構的結果。如果mybatis用呼叫儲存過程的方式去呼叫表值函式,就會丟擲以下的異常:
exception:不能呼叫'xxxxx',因為'xxxx'是表值函式物件。
呼叫儲存過程
如果要呼叫一個叫做“pr_test_a”的儲存過程,需要傳入引數並且有返回值。如下所示,resultMap中存的是返回值的欄位名和型別,在select中呼叫儲存過程,傳入對應的引數
<resultMap type="java.util.HashMap" id="resultMap"> <result column="id" property="id" javaType="java.lang.Integer" jdbcType="INTEGER"/> <result column="code" property="code" javaType="java.lang.String" jdbcType="VARCHAR"/> <result column="name" property="name" javaType="java.lang.String" jdbcType="VARCHAR"/> <result column="modified_time" property="modifiedTime" javaType="java.sql.Timestamp" jdbcType="TIMESTAMP"/> </resultMap> <select id="selectA" parameterType="java.util.HashMap" statementType="CALLABLE" resultMap="resultMap"> { call pr_test_a( #{id,mode=IN,jdbcType=INTEGER}, #{card_no,mode=IN,jdbcType=VARCHAR} } </select>
呼叫表值函式
就當做一張表來查詢即可。如呼叫一個表值函式fn_test_b,返回結果到resultMap中。
<resultMap type="java.util.HashMap" id="resultMap"> <result column="fullid" property="fullid" javaType="java.lang.String" jdbcType="VARCHAR"/> <result column="seq" property="seq" javaType="java.lang.String" jdbcType="VARCHAR"/> <result column="material_id" property="materialId" javaType="java.lang.Integer" jdbcType="INTEGER"/> </resultMap> <select id="fn_bom_decomposition" parameterType="java.util.HashMap" resultMap="resultMap"> select * from fn_test_b( #{material_id,mode=IN,jdbcType=INTEGER}, #{quantity,mode=IN,jdbcType=NUMERIC}, #{start_time,mode=IN,jdbcType=TIMESTAMP} ) </select>