Sybase呼叫儲存過程並返回結果
阿新 • • 發佈:2019-02-10
最近專案要用Sybase資料庫實現分頁,第一次使用Sybase資料庫,也是第一次使用他的儲存過程。2個多小時才呼叫成功,在此記錄:
專案架構:SSM
1、Sybase本身不支援分頁操作,需要寫儲存過程來呼叫,這是很坑的。儲存過程的內容暫且放下,
儲存過程名:query_xxx_record_detail
輸入輸出引數如下:9個輸入,5個輸出
--input @terminal_no varchar(16), @account_no varchar(16), @begin_time char(14), @end_time char(14), @query_type varchar(1), ---0:query all 1:paging @count_per_page Integer = 10, @start_page_num Integer = 1, @page_count Integer = 1, @timestamp char(19), --output @total_pages integer output, @total_records varchar(8) output, @total_amount varchar(14) output, @return_code char(4) output, @error_msg varchar(255) output as
2、在業務層整理引數:
注意:在使用map攜帶引數時,只需要傳入input引數。。9個
Map<String,Object> queryMap = new HashMap<String, Object>(); //呼叫儲存過程: queryMap.put("terminal_no",terminalNo); queryMap.put("account_no", accountNo); queryMap.put("begin_time", beginTime); queryMap.put("end_time", endTime); queryMap.put("query_type", type); queryMap.put("count_per_page", pageRecordCountNo); queryMap.put("start_page_num", beginPageNo); queryMap.put("page_count",pageCountNo);
List<MposRecord> queryResult = mapper.queryPospMposRecordDetail(queryMap);//使用list得到返回值,是儲存過程中的sql決定的。這個跟其他的select一樣可以封裝
3、在mapper中方法:
/**
* 呼叫儲存過程返回分頁結果
* @param queryMap
* @return
*/
List<MposRecord> queryPospMposRecordDetail(Map<String, Object> queryMap);
4、在xml檔案中:
//簡單的select寫法,但是注意在sybase中:呼叫儲存過程需要加CDATA符號
<select id="queryPospMposRecordDetail" statementType="CALLABLE" parameterMap="queryDetailMap" resultType="java.util.Map">
<![CDATA[{call query_xxx_record_detail (?,?,?,?,?,?,?,?,?, ?,?,?,?)}]]>
</select>
<parameterMap type="java.util.Map" id="queryDetailMap">
<parameter property="terminal_no" mode="IN" jdbcType="VARCHAR"/>
<parameter property="account_no" mode="IN" jdbcType="VARCHAR"/>
<parameter property="begin_time" mode="IN" jdbcType="CHAR"/>
<parameter property="end_time" mode="IN" jdbcType="CHAR"/>
<parameter property="query_type" mode="IN" jdbcType="VARCHAR"/>
<parameter property="count_per_page" mode="IN" jdbcType="INTEGER"/>
<parameter property="start_page_num" mode="IN" jdbcType="INTEGER"/>
<parameter property="page_count" mode="IN" jdbcType="INTEGER"/>
<parameter property="total_pages" mode="OUT" jdbcType="INTEGER"/>
<parameter property="total_records" mode="OUT" jdbcType="VARCHAR"/>
<parameter property="total_amount" mode="OUT" jdbcType="VARCHAR"/>
<parameter property="return_code" mode="OUT" jdbcType="CHAR"/>
<parameter property="error_msg" mode="OUT" jdbcType="VARCHAR"/>
</parameterMap>
注意:
1.statementType="CALLABLE"
2.佔位符:9個傳入引數,5個返回引數都需要佔位符
3.引數列表:傳入引數和返回引數:用mode屬性分開。
總結:呼叫儲存過程基本沒啥區別,包括返回值跟其他select語句也基本一致,可以返回用來封裝的bean或者list,可以返回string或者map。這是在寫xml檔案的時候要注意有些不一樣的。
主要還是最後的xml檔案寫法,跟一般的資料庫sql語句很像