最近在用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结果集的更多相关文章

  1. java 调用oracle 分页存储过程 返回游标数据集

    1.分页类 package org.zh.basic; /** * 页面类 * * @author keven * */ public class PageInfo { // 定义 private S ...

  2. php调用oracle存储

    //todo 调用oracle 存储$config = //数据库配置文件 里面包含 用户密码和host和端口以及dbname $conn = oci_connect($config['usernam ...

  3. Oracle存储过程实现返回多个结果集 在构造函数方法中使用 dataset

    原文 Oracle存储过程实现返回多个结果集 在构造函数方法中使用 dataset DataSet相当你用的数据库: DataTable相当于你的表.一个 DataSet 可以包含多个 DataTab ...

  4. Mybatis下配置调用Oracle自定义函数返回的游标结果集

    在ibatis和Mybatis对存储过程和函数函数的调用的配置Xml是不一样的,以下是针对Mybatis 3.2的环境进行操作的. 第一步配置Mapper的xml内容 <mapper names ...

  5. Java调用Oracle存储Package

    Oracle的包Package中可以有很多存储,可通过该包的总调入口在java中直接调用. //java调用oracle的package代码 public boolean cal() throws j ...

  6. thinkphp调用sqlserver储存过程返回多个结果集

    首先安装扩展 windows 分为两个步骤 找到对应自己PHP版本的pdo扩展,下载解压出来,并且在php.ini里面启用扩展,需要注意的问题是php版本以及是否为安全版本 下载 ODBC Drive ...

  7. java调用Oracle存储存储过程

    数据库表和增删改的procedure参照(http://www.cnblogs.com/J-wym/p/3292913.html) 1.测试添加数据的procedure public void tes ...

  8. mybatis springmvc调用oracle存储过程,返回记录集

    参考: http://bbs.csdn.net/topics/390866155 辅助参考: http://www.2cto.com/kf/201307/226848.html http://blog ...

  9. mybatis 调用oracle存储过程如何返回out参数值

    调试了半天,其实整体用map传入传出也挺简单, 主要是调用存储过程 select标签里平时习惯不写 statementType="CALLABLE",调用没有out参数时也能正常用 ...

随机推荐

  1. Hibernate的批量处理

    Hibernate完全以面向对象的方式操作数据库,当程序员以面向对象的方式操作持久化对象时,将自动转换为对数据的操作.例如我们Session的delete()方法,来删除持久化对象,Hibernate ...

  2. codeproject

    search: http http://www.codeproject.com/Articles/96620/Writing-Http-Handlers-and-Modules-in-IIS-7-5 ...

  3. 不通用版(从SVN取版本,通过MAVEN生成JAVA包,通过SALTSTACK传送到远程服务器并自动重启TOMCAT服务)PYTHON代码

    从昨晚写到今天啊, 第一版测试成功了. PHP和JAVA的更新相对来说,PHP的自动化更新是简单多啦~~ 当然,这只是运维工作当中的一环~~ #!/usr/bin/env python # -*- c ...

  4. 【递归】Vijos P1132 求二叉树的先序序列(NOIP2001普及组第三题)

    题目链接: https://vijos.org/p/1132 题目大意: 给定二叉树的中序和后序遍历,求该二叉树先序遍历. 题目思路: [递归] 这题妥妥递归. 二叉树先序根左右,中序左根右,后序左右 ...

  5. Selenium webdriver 元素操作

    本来这些东西网上一搜一大堆,但是本着收集的精神,整理一份放着吧!哈!哈!哈! 1. 输入框(text field or textarea) WebElement element = driver.fi ...

  6. L - Connections in Galaxy War - zoj 3261

    题意:有一个帝国在打仗,敌方会搞一些破坏,总共用N个阵地,每个阵地都有一个武力值,当第一地方收到攻击的时候他可以进行求助,当然求助的对象只能是武力值比他高的,如果求助失败就输出 ‘-1’, 求助成功就 ...

  7. 学习微信小程序之css16常见布局

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  8. angularjs 创建自定义的指令

    创建自定义的指令 除了 AngularJS 内置的指令外,我们还可以创建自定义指令. 你可以使用 .directive 函数来添加自定义的指令. 要调用自定义指令,HTMl 元素上需要添加自定义指令名 ...

  9. jquery图片滚动

    注:代码来自17sucai网,已去除部分冗余代码,只保留图片效果 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional// ...

  10. Nginx优化—配置优化

    完整配置如下所示: user nginx; #运行的用户 pid /var/run/nginx.pid; worker_processes auto; #定义了nginx对外提供web服务时的word ...