您的位置:首页 > 其它

iBatis调用返回两个游标的存储过程处理方法

2013-08-08 09:15 405 查看
遇到这么一个问题,需要通过Ibatis调用一个返回两个游标的存储过程。在网上找资料来着,发现问此问题的挺多的,但难以找到解决方案,于是,估摸着调用返回一个游标的存储过程处理方式,整出了调用返回两个游标的存储过程。现贴出来与大家共享。
举例如下:
存储过程:

[align=left]create or replace function fn_tester([/align]
[align=left] cursor_data1 out sys_refcursor ,[/align]
cursor_data2
out sys_refcursor
[align=left])[/align]
[align=left]return number[/align]
[align=left]as[/align]
[align=left] [/align]

[align=left]begin[/align]
[align=left] begin[/align]
[align=left] [/align]
open cursor_data1

[align=left] for SELECT[/align]
[align=left] e.data_1,[/align]
[align=left] e.data_2,[/align]
e.data_3 from a_table
e;
[align=left] [/align]
open cursor_data2
for
[align=left] for SELECT[/align]
[align=left] e.data_4,[/align]
[align=left] e.data_5,[/align]
e.data_6 from b_table
e;
[align=left] [/align]
[align=left]end fn_tester;[/align]

[align=left]sqlmap 写法如下:[/align]
[align=left]<!-- 游标1数据配置-->[/align]
<resultMap class="com.table1" id="result1">

<result property="data1" column="data_1"/>

<result property="data2" column="data_2"/>

<result property="data3" column="data_3"/>

</resultMap>

<!-- 游标2数据配置-->

<resultMap class="com.table2" id="result2">

<result property="data4" column="data_4"/>

<result property="data5" column="data_5"/>

<result property="data6" column="data_6"/>

</resultMap>

<!-- 调用存储过程传入参数配置-->

<parameterMap class="java.util.HashMap" id="testParam">

<parameter property="result" jdbcType="INTEGER"

javaType="java.lang.Long" mode="OUT" />

<parameter property="table1Data" jdbcType="ORACLECURSOR"

javaType="java.sql.ResultSet" resultMap="result1" mode="OUT" />

<parameter property="table2Data" jdbcType="ORACLECURSOR"

javaType="java.sql.ResultSet" resultMap="result2" mode="OUT" />

</parameterMap>

<!-- 存储过程调起-->

<procedure id="testId" parameterMap="testParam">

<![CDATA[

{? = call fn_tester(?,?)}

]]>

</procedure>

dao层数据获取:
其中table1、table2是两个pojo;

[align=left]public void getData(Map paramMap) throws SqlException {[/align]
[align=left] try {[/align]
[align=left] getSqlMapClientTemplate().queryForObject( NAMESPACE + "testId" ,paramMap);[/align]
[align=left] // 游标1获取[/align]
[align=left] List< table1> dataList1= (List<table1>)paramMap.get( "table1Data" );[/align]
[align=left] // 游标2获取[/align]
[align=left] List< table2> dataList2= (List<table2>)paramMap.get( "table2Data" );[/align]
[align=left] [/align]
} catch (SqlException e)
{
[align=left] throw e;[/align]
[align=left] }[/align]
[align=left] [/align]
[align=left] System. out .println(dataList1);[/align]
[align=left] System. out .println(dataList2);[/align]
[align=left] }[/align]

自己写个测试用例就可以测试了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐