为了方便我们经常需要函数/过程返回结果集时采用返回cursor的方式得到结果集,在ibatis以前版本中支持的不是很好,
现在最新版本已经可以支持的很好了.
一.下载最新ibatis包.
二.最新的连接oracle 10g的驱动ojdbc(我这里用的是oracle 10g)
三.下载最新的common包.
示例如下:
函数定义:
CREATE
OR
REPLACE
FUNCTION
GetCurTest(
param1
in
varchar2
;
param2
in
varchar2
;
)
return
SYS_REFCURSOR
IS
outCursor SYS_REFCURSOR;
--
输出的游标
BEGIN
open
outCursor
for
select
ORGANCODE
from
testTable
where
col1
=
GetCurTest.param1
and
col2
=
GetCurTest.param2;
return
outCursor;
END
;
注意这里用的是SYS_REFCURSOR,在oracle10g里面提供的.
ibatis中调用如下:
<
typeAlias
alias
="corp"
type
="com.wes.model.Corp"
/>
<
resultMap
id
="corp-map"
class
="corp"
>
<
result
property
="corpNo"
column
="ORGANCODE"
/>
</
resultMap
>
<
parameterMap
id
="test"
class
="java.util.HashMap"
>
<
parameter
property
="result"
jdbcType
="ORACLECURSOR"
javaType
="java.sql.ResultSet"
mode
="OUT"
resultMap
="corp-map"
/>
<
parameter
property
="param1"
jdbcType
="VARCHAR"
javaType
="java.lang.String"
mode
="IN"
/>
<
parameter
property
="param2"
jdbcType
="Date"
javaType
="java.util.Date"
mode
="IN"
/>
</
parameterMap
>
<
procedure
id
="testCur"
parameterMap
="test"
>
{? = call GetCurTest(?, ?)}
</
procedure
>
java中调用如下:
String resource
=
"
SqlMapConfig.xml
"
;
SqlMapClient client
=
null
;

try
...
{
Reader reader = Resources.getResourceAsReader(resource);
client = SqlMapClientBuilder.buildSqlMapClient(reader);

}
catch
(Throwable e)
...
{}
Map p
=
new
HashMap();
p.put(
"
param1
"
,
"
a
"
);
p.put(
"
param2
"
,
"
b
"
);
client.queryForObject(mapid, p);
List list
=
(List) p.get(
"
result
"
);
if
(list
==
null
||
list.size()
==
0
)
list
=
new
ArrayList();
return
list;
list存放的就是我们要的结果集.
现在最新版本已经可以支持的很好了.
一.下载最新ibatis包.
二.最新的连接oracle 10g的驱动ojdbc(我这里用的是oracle 10g)
三.下载最新的common包.
示例如下:
函数定义:











ibatis中调用如下:




























