原
Mybatis调用Oracle中的包和存储过程
-
create
or
replace
package pkg_alen
-
as
-
type cursorRef
is
ref
cursor;
-
procedure query2(u_name VARCHAR2,cursor_ref out cursorRef);
-
end pkg_alen;
2.创建包体
-
create
or
replace
package
body pkg_alen
-
is
-
procedure query2(u_name VARCHAR2,cursor_ref
out cursorRef)
-
as
-
begin
-
open cursor_ref
for
SELECT username,
password
FROM USERINFO
where USERNAME=u_name;
-
end query2;
-
end pkg_alen;
3.sql中调用包查询数据
-
declare
-
return_cursor pkg_alen.cursorRef;
--定义接收返回数据集的变量
-
username varchar2(20);
--定义接收id的变量
-
password varchar2(50);
--定义接收name的变量
-
begin
-
pkg_alen.query2(
'huxiangen',return_cursor);
--调用包中的存储过程返回游标引用
-
loop fetch return_cursor into username,password;
--循环获取游标中每一行的数据
-
exit when return_cursor%notfound;
--游标结束时退出
-
dbms_output.put_line('username:'||username||' password:'||password);
--将获取到的值打印出来
-
end
loop;
--循环结束
-
close return_cursor;
--关闭游标
-
end;
4.mybatis调用
①、代码编写
-
Map<String,Object> map=
new HashMap<String, Object>();
-
map.put(
"username",username);
-
map.put(
"return_cursor",
new ArrayList<Map<String,Object>>());
-
System.out.println(
"开始查询--------------"+username);
-
userService.findByname(map);
-
System.out.println(
"查询结果--------------"+map.get(
"return_cursor").toString());
②、mapper.xml写法
-
<resultMap type =
"java.util.HashMap" id=
"cursorMap">
-
<result column =
"ID" property=
"id" />
-
<result column =
"USERNAME" property=
"username" />
-
<result column =
"PASSWORD" property=
"password" />
-
</resultMap >
-
<select id=
"findByName" statementType=
"CALLABLE" parameterType=
"java.util.HashMap" >
-
{call pkg_alen.query2(#{username, jdbcType=VARCHAR, mode=IN},
-
#{return_cursor, mode=OUT, jdbcType=CURSOR,javaType=ResultSet,resultMap=cursorMap})}
-
</select>
注意:返回的游标数据就是你传进去的游标直接在controller中取map.get("return_cursor")就可以拿到查询的数据。
存储过程的调用也是一样,只是没有包名而已
测试Ok,有什么问题欢迎留言咨询。
</article>