ssm调用oracle存储过程

ssm调用oracle存储过程

Posted by czkuo on March 24, 2019

ssm调用oracle存储过程

1.创建简单存储过程:

CREATE OR REPLACE PROCEDURE czk_demo(cid in number,cc out sys_refcursor) IS

BEGIN
open cc for

select * from P_INDICATOR_TYPES where id !=cid;

END czk_demo;
返回结果集->sys_refcursor 游标

2.xml中:

<select id="selelname" statementType="CALLABLE"
            parameterType="java.util.Map" >
			{call czk_demo(#{id,mode=IN,  jdbcType=NUMERIC},		#{cc ,mode=OUT,jdbcType=CURSOR,javaType=java.sql.ResultSet,resultMap=com.yqjr.fin.risk.stat.mapper.IndicatorTypesMapper.BaseResultMap})}
			</select>
通过call{存储过程名字(参数)}的,参数有传入参数和传出参数
  1. 传入 mode=IN ,传出mode=OUT
  2. 传出的jdbcType如果是结果集为CURSOR ->游标
  3. 返回的resulMap中一定要加上命名空间+关系映射名称

命名空间

命名空间

xml xml

返回的是一个参数

3.dao中:

public String selelname(Map<String,Object> m);

4.rest中:

  public ResultMsg<String> demo(IndicatorTypes it) {
        Map<String,Object> m = new HashMap<String,Object>();
        m.put("id",it.getId());
        baseService.selelname(m);
        System.out.println(baseService.selelname(m));
        List<IndicatorTypes> list = (List)m.get("cc");
        for(IndicatorTypes a:list){
            System.out.println(a.getCode()+"==="+a.getName());
        }

        System.out.println(list.size());
        return new ResultMsg<String>(Const.CODE_SUCCESS, "修改成功", Const.SUCCESS, "");
    }
  1. New一个map集合
  2. 在里面定义xml中#{}里面的字段
  3. 返回结果自动存到定义的map中
  4. Map.get(字段)就能取出来结果
  5. 强转成list 就OK了