mybatis3调用oracle存储过程

 

 今天用到了mybatis3 调用oracle的存储过程,这存储过程仅负责查询数据和返回查询结果

 

oracle的存储过程,如果要查询数据必须有一个游标供使用 

先看下简单的存储过程 

 

CREATE OR REPLACE PROCEDURE zdrqlx_PROC
    (
           V_TEMP OUT zdrqlxPackage.zdrqlx_cursor
   )
   AS
   BEGIN
           OPEN V_TEMP FOR SELECT LXMC FROM TBGW_ZHDRQFL ;
END zdrqlx_PROC;

 

 

这个存储过程查询后 结果是 一列数据 列名 LXMC 

 

下面贴查询mybatis的配置

 

 

<resultMap id="teshurenqunMap" type="bean.admin.menus.ZhongDianRenQunBean" >
<result column="lxmc" property="lxmc" />
</resultMap>

<select id="selectByMap"  parameterType="map"   statementType="CALLABLE" >
	{ call zdrqlx_PROC(#{listinfo,mode=OUT,jdbcType=CURSOR,javaType=java.sql.ResultSet,resultMap=teshurenqunMap})}
</select>

 

 

程序调用的是selectByMap 这个方法 在调用的时候 需要传入一个参数 这里参数名是map ,map内可以什么属性都没有, 在mybatis调用存储过程后,会把数据 回塞给这个map

所以 如果你的程序是   Map resultmap = dao.selectByMap(map); 

然后去读取resultmap ,结果会是null的 什么都没有,而数据实际上在被存在参数的map里面 而不是resultmap  (map 是参数map,resultmap 是返回接收的) 这点很重要,我被卡住了半天!!!

 

下面是调用  看了上面一段话 下面的程序一目了然

 

 

 

 Map map = new HashMap();
			 menusService.getToolsBarMunus(map);//这里调用selectByMap
			 map.put("success", true);
//这边数据会存在这个参数map里,是被回填的了
			datas.append(com.alibaba.fastjson.JSON.toJSONString(map));

 

 

com.alibaba.fastjson.JSON.toJSONString(map)  

这句话是用的json组件转化map得到string,结果是下面的

 

{"listinfo":[{"lxmc":"张三"},{"lxmc":"李四"},{"lxmc":"王五"}{"lxmc":"赵六"}]}

根据结果,反过来看调用存储过程

{ call zdrqlx_PROC(#{listinfo,mode=OUT,jdbcType=CURSOR,javaType=java.sql.ResultSet,resultMap=teshurenqunMap})}

 

1. listinfo 这个是第一个参数,我是随意写的,不和任何东西管理,看下上面json转化后的map结果就明白了

2  mode=OUT 声明此参数作为输出类型

3  jdbcType=CURSOR 说明他是游标 因为这个存储过程主要是查询,需要传入一个游标参数,不信的话你在plsql里面test存储过程 看下面就明白了

javaType=java.sql.ResultSet, 貌似固定要求这样,求大神解答

 5 resultMap 必须有这个参数 我这里配置的 是resultMap id="teshurenqunMap" 对应的

 

 

最后是我的bean 也就是resultMap 设置的type=

 

package bean.admin.menus;

import java.util.List;

public class ZhongDianRenQunBean {
	private String lxmc;
	public String getLxmc() {
		return lxmc;
	}

	public void setLxmc(String lxmc) {
		this.lxmc = lxmc;
	}

}

 

 

 

讲的很乱 希望能对碰到类似问题的同学有所帮助。。。

 

 

 

 

 

 

 

 

 

 

 

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值