ibatis调存储过程返回游标
http://blog.sina.com.cn/s/blog_6f3ca78f01010pmj.html
iBatic调用与JAVA调用很类似,只是JAVA把参数的注册放到了类里面,而iBatis把参数的注册放到了XML配置文件里,下面两个例子,第一个是返回普通数据,第二个是返回游标。
Map map = new HashMap(); map.put("username", "JACK"); sqlMapClient.queryForObject("pro_test",map); System.out.println(map); 输出结果: {o=NBA, ooo=1, oo=JACK, username=JACK} |
<!-- 存储过程 --> <parameterMap class="hashmap" id="pro_map"> <parameter property="username" javaType="String" jdbcType="VARCHAR" mode="INOUT"/> <parameter property="o" javaType="String" jdbcType="VARCHAR" mode="OUT"/> <parameter property="ooo" javaType="java.lang.Integer" jdbcType="INTEGER"mode="OUT"/> <parameter property="oo" javaType="String" jdbcType="VARCHAR" mode="OUT"/> </parameterMap> <procedure id="pro_test" parameterMap="pro_map"> {call user_account_proc(?,?,?,?)} </procedure> |
create or replace procedure user_account_proc ( uname in out varchar, ugroupname out varchar, uid out number, ugro out varchar ) as begin select groupname,username,userid into ugroupname,ugro,uid from user_account where username = uname; end; |
Map map1 = new HashMap(); sqlMapClient.queryForObject("pro_cursor",map1); System.out.println(map1.get("backcursor")); 输出结果: [ {userid=1, username=JACK, userpwd=BEIJING, groupname=NBA}, {userid=2, username=TOM, userpwd=SHANGHAI, groupname=NBA}, {userid=3, username=MARY, userpwd=SHANGHAI, groupname=IBM} ] |
配置文件: <resultMap class="hashmap" id="backmap"> <result property="userid" column="USERID"/> <result property="username" column="USERNAME"/> <result property="userpwd" column="USERPWD"/> <result property="groupname" column="GROUPNAME"/> </resultMap> <parameterMap class="hashmap" id="pro_cursor_map"> <parameter property="backcursor" javaType="java.sql.ResultSet" jdbcType="ORACLECURSOR" mode="OUT" resultMap="backmap"/> </parameterMap> <procedure id="pro_cursor" parameterMap="pro_cursor_map"> {call user_account_proc1(?)} </procedure> |
过程: create or replace procedure user_account_proc1 ( my_cursor out sys_refcursor ) as begin open my_cursor for select * from user_account; end; |
1、对于全部是in 类型的参数过程,采用下面的方法调用(ibatis版本是2.3)
比如过程:
Procedure Flashback_Op(v_table_owner Varchar2,v_table_name Varchar2,v_FlashbackScn Number,v_xid Varchar2,v_dbid number);
调用方法:
<parameterMap id="tableDml_recycle" class="java.util.Map">
<parameter property="owner" jdbcType="varchar"
javaType="java.lang.String" mode="IN " />
<parameter property="name" jdbcType="varchar"
javaType="java.lang.String" mode="IN " />
<parameter property="scn" jdbcType="NUMBER"
javaType="java.math.BigDecimal" mode="IN " />
<parameter property="dbId" jdbcType="NUMBER"
javaType="java.math.BigDecimal" mode="IN " />
</parameterMap>
<procedure id="tableDml_zcRecycle" parameterMap="tableDml_recycle">
{call TassetREC.Flashback_Op(?,?,?,?,?)}
</procedure>
2、对于返回类型是游标 (OUT)的函数,采用如下方式调用。
函数:
Function GetFirstPageNumRows(v_where varchar2,v_dbid Number,v_Numrows varchar2,v_queryid varchar2) return sys_refcursor ;
调用方式:
<parameterMap id="searchParam" class="java.util.Map">
<parameter property="result" jdbcType="ORACLECURSOR"
javaType="java.sql.ResultSet" mode="OUT " resultMap="auditselect_resultList" />
<parameter property="ipAddress"
jdbcType="varchar" javaType="java.lang.String" mode="IN" />
<parameter property="dbId" jdbcType="NUMBER"
javaType="java.math.BigDecimal" mode="IN"/>
<parameter property="countNumber" jdbcType="NUMBER"
javaType="java.lang.Integer" mode="IN"/>
<parameter property="clientId" jdbcType="VARCHAR2"
javaType="java.lang.String" mode="IN"/>
</parameterMap>
<procedure id="firstPage" parameterMap="searchParam">
{? = call tlgadmin.GetFirstPageNumRows(?,?,?,?)} (注意返回值在前面用?代表)
</procedure>
java代码这么取值:
@SuppressWarnings("unchecked")
public List getAuditSelectByPages(Map map) {
getSqlMapClientTemplate().queryForList("firstPage", map);//调用
List arryList = (ArrayList) map.get("result");//取值
return arryList;
}
3、对于返回值为一般数据类型的函数:
函数:
Function DeleteCommand(v_commandid Number,v_commandsetid Number default 0,v_dbid Number default 0) return Number ;
采用如下方式处理(把返回值当作出参来处理OUT):
<parameterMap id="CommandDeleteById" class="java.util.Map">
<parameter property="result" jdbcType="VARCHAR"
javaType="java.lang.String" mode="OUT" />
<parameter property="commandId" jdbcType="NUMBER"
javaType="java.lang.Integer" mode="IN" />
<parameter property="commandsetId" jdbcType="NUMBER"
javaType="java.lang.Integer" mode="IN" />
<parameter property="dbId" jdbcType="NUMBER"
javaType="java.math.BigDecimal" mode="IN" />
</parameterMap>
<procedure id="Command_deleteById"
parameterMap="CommandDeleteById">
{ ? = call truleadmin.DeleteCommand(?,?,?)}
</procedure>
java代码
this.getSqlMapClientTemplate().delete("Command_deleteById", map);
String num = (String) map.get("result");
return num;
ibatis调存储过程返回游标的更多相关文章
- oracle ibatis 存储过程 返回游标 嵌套表
自己解决问题了 问题总结: 1.index by表不能存储在数据库中的type中,故选择嵌套表. 2.ibatis不支持oracle的复合数据类型的返回.(个人理解) 3.替代方案:用返回oracle ...
- mybatis 调用存储过程 返回游标 实例
存储过程示例: create or replace procedure Fsp_Plan_CheckPrj(v_grantno varchar2, v_deptcode number, v_curso ...
- sqlserver 存储过程返回游标的处理
创建表: create table tb1( id int , name ) ) ------------------------------------------------- 创建返回游标的存储 ...
- myBatIs.Net 调用Oracle 存储过程返回游标
找了好久,网上也没示例,全是java的,没办法,后来看到一个网上别人写的例子. http://www.myfirm.cn/blog/article/Control/13.html 上面照套还是出错,我 ...
- Oracle存储过程返回游标实例详解
复制代码 代码如下:CREATE OR REPLACE PROCEDURE PROCSENDEMAIL(P_TXT VARCHAR2, P_SUB VARCHAR2, P_SENDOR VARCHAR ...
- java 调用oracle 分页存储过程 返回游标数据集
1.分页类 package org.zh.basic; /** * 页面类 * * @author keven * */ public class PageInfo { // 定义 private S ...
- Java和Ibatis调用存储过程并取得返回值详解
Java和Ibatis调用存储过程并取得返回值详解 2011-07-19 17:33 jiandanfeng2 CSDN博客 字号:T | T 本文主要介绍了Java和Ibatis调用存储过程的方法, ...
- (转载)oracle 在一个存储过程中调用另一个返回游标的存储过程
原文链接:http://www.jb51.net/article/20160.htm 实际项目当中经常需要在一个存储过程中调用另一个存储过程返回的游标,本文列举了两种情况讲述具体的操作方法. 第一种情 ...
- Java调用oracle存储过程通过游标返回临时表数据
注:本文来源于 < Java调用oracle存储过程通过游标返回临时表数据 > Java调用oracle存储过程通过游标返回临时表数据 项目开发过程中,不可避免的会用到存储过程返回结 ...
随机推荐
- uniq linux下去除重复行命令
一,uniq干什么用的 文本中的重复行,基本上不是我们所要的,所以就要去除掉.linux下有其他命令可以去除重复行,但是我觉得uniq还是比较方便的一个.使用uniq的时候要注意以下二点 1,对文本操 ...
- net 内存泄露和内存溢出
一直以来都对内存泄露和内存溢出理解的不是很深刻.在网上看到了几篇文章,于是整理了一下自己对内存泄露和内存溢出的理解. 一.概念 内存溢出:指程序在运行的过程中,程序对内存的需求超过了超过了计算机分配给 ...
- 未能找到类型或命名空间“Compare”
在用vs2012 .net Framework4.5 Mvc3做一个MVCMusicStore 的例子时,遇到这样一个问题 解决办法: 具体原因也不是很清楚,据说是引用Compare做验证时会有二 ...
- oracle 中的truncate 和delete
一.查询表大小,块多少语句 Select SEGMENT_Name,BYTES,BLOCKS,Extents From dba_segments Where segment_name In('BAI_ ...
- HOG特征
HOG(Histogram of gradient)统计图像局部区域的梯度方向信息来作为该局部图像区域的表征.HOG特征具有以下几个特点: (1)不具有旋转不变性(较大的方向变化),实际应用中不变性是 ...
- 新发现:原来java正则表达式不写^和$也可以运行
最近用了好多正则表达式,都是循规蹈矩的在前面加上^在后面加上$ 像这个样子"^[.]\\S+$",但实际上我在eclipse和editplus下都试了一下,不加前缀和后缀也是可以的 ...
- Linux下OpenSSL 安装
安装环境: 操作系统:CentOs6.3 OpenSSL Version:openssl-1.0.0e.tar.gz 目前版本最新的SSL地址为http://www.openssl.org/sour ...
- get和post,session和cookie的一些说明
1.GET和POST的区别 A. 从字面意思和HTTP的规范来看,GET用于获取资源信息而POST是用来更新资源信息. B. GET提交请求的数据实体会放在URL的后面,用?来分割,参数用& ...
- Activity的启动模式总结
<activity android:name="ActivityMain" android:launchMode="singleTask">< ...
- Python邮箱客户端编写之接收邮件操作
Python的POP3类有很多方法来管理邮箱. 首先需要导入poplib库,import poplib POP3(server) 连接到邮箱服务器 user(username)将用户名发送至服务器,等 ...