Mybatis调用Oracle中的包和存储过程

Mybatis调用Oracle中的包和存储过程


 
  1. create or replace package pkg_alen
  2. as
  3. type cursorRef is ref cursor;
  4. procedure query2(u_name VARCHAR2,cursor_ref out cursorRef);
  5. end pkg_alen;

2.创建包体


 
  1. create or replace package body pkg_alen
  2. is
  3. procedure query2(u_name VARCHAR2,cursor_ref out cursorRef)
  4. as
  5. begin
  6.      open cursor_ref for SELECT username, password FROM USERINFO where USERNAME=u_name;
  7. end query2;
  8. end pkg_alen;

3.sql中调用包查询数据


 
  1. declare
  2. return_cursor pkg_alen.cursorRef; --定义接收返回数据集的变量
  3. username varchar2(20); --定义接收id的变量
  4. password varchar2(50); --定义接收name的变量
  5. begin
  6. pkg_alen.query2( 'huxiangen',return_cursor); --调用包中的存储过程返回游标引用
  7. loop fetch return_cursor into username,password; --循环获取游标中每一行的数据
  8. exit when return_cursor%notfound; --游标结束时退出
  9. dbms_output.put_line('username:'||username||' password:'||password); --将获取到的值打印出来
  10. end loop; --循环结束
  11. close return_cursor; --关闭游标
  12. end;

4.mybatis调用

①、代码编写


 
  1. Map<String,Object> map= new HashMap<String, Object>();
  2. map.put( "username",username);
  3. map.put( "return_cursor", new ArrayList<Map<String,Object>>());
  4. System.out.println( "开始查询--------------"+username);
  5. userService.findByname(map);
  6. System.out.println( "查询结果--------------"+map.get( "return_cursor").toString());

②、mapper.xml写法


 
  1. <resultMap type = "java.util.HashMap" id= "cursorMap">
  2. <result column = "ID" property= "id" />
  3. <result column = "USERNAME" property= "username" />
  4. <result column = "PASSWORD" property= "password" />
  5. </resultMap >
  6. <select id= "findByName" statementType= "CALLABLE" parameterType= "java.util.HashMap" >
  7. {call pkg_alen.query2(#{username, jdbcType=VARCHAR, mode=IN},
  8. #{return_cursor, mode=OUT, jdbcType=CURSOR,javaType=ResultSet,resultMap=cursorMap})}
  9. </select>

注意:返回的游标数据就是你传进去的游标直接在controller中取map.get("return_cursor")就可以拿到查询的数据。

存储过程的调用也是一样,只是没有包名而已

测试Ok,有什么问题欢迎留言咨询。

</article>

扫码向博主提问

huxiangen

非学,无以致疑;非问,无以广识
  • 擅长领域:
  • java框架
  • Jquery
  • Oracle
  • MongoDB
  • html/jsp
去开通我的Chat快问
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值