博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
ibatis.net调用oracle存储过返回游标SYS_REFCURSOR结果集
阅读量:6584 次
发布时间:2019-06-24

本文共 1326 字,大约阅读时间需要 4 分钟。

    最近在用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<>集合中。

 

 

转载于:https://www.cnblogs.com/eshinex/p/4227352.html

你可能感兴趣的文章
Python PyPI中国镜像
查看>>
centos 设置静态IP
查看>>
[Angularjs]系列——学习与实践
查看>>
js -- canvas img 封装
查看>>
转 我们工作的动力是什么 工作最终是为了什么?
查看>>
测试一个网站的最大并发量并发数并发用户
查看>>
适配器模式(数据库方面)支持不同的数据库连接
查看>>
CF456B Fedya and Maths 找规律
查看>>
nodejs安装及windows环境配置
查看>>
转载:Beginning WF 4.0翻译——第三章(流程图工作流)
查看>>
mysql alter table
查看>>
芯片测试
查看>>
在源代码中插入防止盗版代码片段的方式
查看>>
hdu 3367 Pseudoforest(最大生成树)
查看>>
一个人,一则故事,一份情愫,一个世界……
查看>>
ffserver联合ffmpeg建立媒体服务器
查看>>
下载稻草人下来刷新+gallery
查看>>
删除浏览器浏览器删除cookie方法
查看>>
微软URLRewriter.dll的url重写的简单使用(实现伪静态)
查看>>
leetcode -- Combination Sum II
查看>>