ibatis.net调用oracle存储过返回游标SYS_REFCURSOR结果集
最近在用ibatis.net框架和oracle 11g开发一套程序。其中有一个需求就是通过存储过程,查询指定条件的数据集。
但是在开发的过程中遇到了问题,问题如下:
1.如何通过ibatis.net执行存储过程?
2.通过ibatis.net执行存储过程时,如何传参数?
3.通过ibatis.net执行存储过程时,传递参数过程中,dbType和type是如何对应的?
4.oracle存储过程中返回的游标集合SYS_REFCURSOR对应dbType是什么?
5.通过ibatis.net执行存储过程后,得到的SYS_REFCURSOR游标数据集合如何序列化,存储到IList<T>集合中?
下面概述一下我程序的代码结构,主要分为如下几层:
1.ENT实体层,数据库表、视图、数据集与实体类对应
2.PRL持久层,数据持久化,入库,出库等
3.SER服务层,封装持久层
4.WEB前端,Map文件,dao文件,等config文件以及前端。
下面针对上述的问题,做解答:
1.SER层中封装对调用存储过程调用方法,执行到最后,调用ibatis.net中的 QueryForList<T>(statementName, parameterObject)方法来。(如下图方法)
(图一)
2.ibatis.net框架中传递参数要分为两块,1块为xml文件配制处传递参数,另一块为构造图一中的parameterObjec。
第一块:StoredProcedure.xml配置文件,构造配置参数。
(图二)
第二块:构造parameterObjec参数的Hashtable。
(图三)
3.关于dbType和type关系,dbType只的是oracle数据中的数据类型,type只的是数据库中的数据转换为.net对应的数据类型。(从图二可以看出来)
4.在ibatis.net中,默认使用的是ODP.NET对调用oracle数据库做的封装,起对应的dbType为RefCursor,而不是直接把SYS_REFCURSOR这个类型填写过来,要去掉前面的SYS_。
5.现在参数处理完毕,数据集合也可以得到了,如何将得到的SYS_REFCURSOR游标数据集合序列化到对应的实体集合中呢?这个时候还是通过StoredProcedure.xml配置文件中的配置实现的。
(图四)
最后就是StoredProcedure.xml文件中如何配置调用存储过程了。如下如:
(图五)
需要注意的几个参数:
1.id="ProEventType2Tj",这个是构造唯一sql语句的参数,不能重复。
2.parameterMap="ProEventTypePara",指的是问题2中,配置文件配置的参数。
3.resultMap="ProVEventType2TjResult",将通过oracle游标SYS_REFCURSOR得到数据集,与resultMap中指定的class做对比,将游标中每条咧与映射的实体类的属性比较赋值,完成序列化,将数据填充到IList<>集合中。
ibatis.net调用oracle存储过返回游标SYS_REFCURSOR结果集的更多相关文章
- java 调用oracle 分页存储过程 返回游标数据集
1.分页类 package org.zh.basic; /** * 页面类 * * @author keven * */ public class PageInfo { // 定义 private S ...
- php调用oracle存储
//todo 调用oracle 存储$config = //数据库配置文件 里面包含 用户密码和host和端口以及dbname $conn = oci_connect($config['usernam ...
- Oracle存储过程实现返回多个结果集 在构造函数方法中使用 dataset
原文 Oracle存储过程实现返回多个结果集 在构造函数方法中使用 dataset DataSet相当你用的数据库: DataTable相当于你的表.一个 DataSet 可以包含多个 DataTab ...
- Mybatis下配置调用Oracle自定义函数返回的游标结果集
在ibatis和Mybatis对存储过程和函数函数的调用的配置Xml是不一样的,以下是针对Mybatis 3.2的环境进行操作的. 第一步配置Mapper的xml内容 <mapper names ...
- Java调用Oracle存储Package
Oracle的包Package中可以有很多存储,可通过该包的总调入口在java中直接调用. //java调用oracle的package代码 public boolean cal() throws j ...
- thinkphp调用sqlserver储存过程返回多个结果集
首先安装扩展 windows 分为两个步骤 找到对应自己PHP版本的pdo扩展,下载解压出来,并且在php.ini里面启用扩展,需要注意的问题是php版本以及是否为安全版本 下载 ODBC Drive ...
- java调用Oracle存储存储过程
数据库表和增删改的procedure参照(http://www.cnblogs.com/J-wym/p/3292913.html) 1.测试添加数据的procedure public void tes ...
- mybatis springmvc调用oracle存储过程,返回记录集
参考: http://bbs.csdn.net/topics/390866155 辅助参考: http://www.2cto.com/kf/201307/226848.html http://blog ...
- mybatis 调用oracle存储过程如何返回out参数值
调试了半天,其实整体用map传入传出也挺简单, 主要是调用存储过程 select标签里平时习惯不写 statementType="CALLABLE",调用没有out参数时也能正常用 ...
随机推荐
- [Ioi2005]River
设f[i][j][k]表示i上游最近的一个伐木场为j且在i所在的子树里共建了k个伐木场(不包含在i的)的最小运费和 设v为u的儿子,dist[u]为u到0号点的距离. 则当i>=j时 f[u][ ...
- CentOS下安装配置Cacti
cacti简介 随着公司规模扩大,服务器也日渐增多,对服务器集群的网络流量和服务器性能实时监测显得愈发重要.开源阵营中常用有MRTG(MultiRouter Traffic Grapher)--基于S ...
- IIS principle
IIS Request | | | Application Pool Config | | | W3WP | | | Many Module | | | AppDomain:这才是.NET的入口 | ...
- zoj 3777 Problem Arrangement
http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=5264 题意:给出n道题目以及每一道题目不同时间做的兴趣值,让你求出所有做题顺序 ...
- Java Tomcat SSL 服务端/客户端双向认证
借花献佛:http://www.blogjava.net/icewee/archive/2012/06/04/379947.html
- BZOJ 1013 [JSOI2008]球形空间产生器sphere
1013: [JSOI2008]球形空间产生器sphere Time Limit: 1 Sec Memory Limit: 162 MBSubmit: 3074 Solved: 1614[Subm ...
- Hadoop MapReduce中压缩技术的使用
Compression and Input Splits 当我们使用压缩数据作为MapReduce的输入时,需要确认数据的压缩格式是否支持切片? 假设HDFS中有一个未经压缩的大小为1GB的文 ...
- yui--datatable 更新table数据
使用render可以重新渲染datatable,之前添加的样式等信息也想相应会初始化,另外行定位等也会失效 使用updateRows方法不会删除样式等信息 更新datasource中_oData数据 ...
- Shell遍历文件的每一行
由于使用for来读入文件里的行时,会自动把空格和换行符作为一样分隔符,因为当行里有空格的时候,输出的结果会很乱,所以…… cat input.txt |while read line> do&g ...
- tengine rpm制作
最近又在centos6.4下折腾tengine了,刚好不久前看了rpm包的制作方法,所以又有了搞个rpm包的想法. 1 安装centos的开发环境集成包及tengine的依赖包 1 yum group ...