mybatis 调用存储过程 返回游标 实例

存储过程示例: 
create or replace procedure Fsp_Plan_CheckPrj(v_grantno  varchar2, v_deptcode number,  v_cursor   out sys_refcursor) is 
……………… 
    ---返回统计结果 
    open v_Cursor for 
      select s.plan_code, 
             s.plan_dept, 
             s.plan_amount, 
             s.exec_amount, 
             p.cname       as plan_name, 
             d.cname       as dept_name 
        from Snap_plan_checkprj s 
        left join v_plan p 
          on s.plan_code = p.plan_code 
        left join org_office d 
          on s.plan_dept = d.off_org_code 
       group by s.plan_code, 
                s.plan_dept, 
                s.plan_amount, 
                s.exec_amount, 
                p.cname, 
                d.cname; 
  end; 
end Fsp_Plan_CheckPrj;  


mybatis:(mybatis doc api:  http://mybatis.github.io/mybatis-3/zh/sqlmap-xml.html#Result_Maps) 

java层代码

Map<String, Object> params = new HashMap<String, Object>();
GrantSetting gs = this. grantSettingDao.get(grantCode);
params.put( "grantNo", StringUtils. substring(gs.getGrantNo(), 0, 2));
params.put( "offOrgCode", SecurityUtils.getPersonOffOrgCode());

params.put("v_cursor", new ArrayList<Map<String, Object>>());//传入一个jdbc游标,用于接收返回参数
this. batisDao. getSearchList("call_Fsp_Plan_CheckPrj", params);

mybatis xml配置 

<resultMap type ="java.util.HashMap" id= "cursorMap"><!--配置返回游标中别名对应的resultMap -->
     <result column ="plan_code" property="plan_code" />
     <result column ="plan_dept" property="plan_dept"  />
     <result column ="plan_amount" property="plan_amount" />
     <result column ="exec_amount" property="exec_amount"  />
     <result column ="plan_name" property="plan_name" />
     <result column ="dept_name" property="dept_name" />
</resultMap >
<select id ="call_Fsp_Plan_CheckPrj" parameterType= "map" statementType="CALLABLE" >
                                                         <!--注明statementType="CALLABLE"表示调用存储过程-->
     {call Fsp_Plan_CheckPrj(#{grantNo, jdbcType=VARCHAR, mode=IN},
                                   #{offOrgCode, jdbcType=INTEGER, mode=IN},
     #{v_cursor, mode=OUT, jdbcType=CURSOR, resultMap=cursorMap})}
<!--传入传出参数要注明mode=IN/OUT 并要注明jdbcType(在网上可以查询mybatis支持哪些jdbcType类型),返回参数要注明对应的resultMap-->
</select >

最后,在jsp页面只需遍历 
params.put( "v_cursor", OracleTypes. CURSOR);中的v_cursor。本身就是一个可遍历的list结果集 

  • 9
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值