在一个邮件列表的讨论中,了解了如何在IBatis.Net中返回DataSet以及一些相关的内容。

        public static DataSet QueryForDataSet(string statementName, object paramObject)
        {
            DataSet ds = new DataSet();
            ISqlMapper mapper = GetMapper();
            IMappedStatement statement = mapper.GetMappedStatement(statementName);
            if (!mapper.IsSessionStarted)
            {
                mapper.OpenConnection();
            }
            RequestScope scope = statement.Statement.Sql.GetRequestScope(statement, paramObject, mapper.LocalSession);
            statement.PreparedCommand.Create(scope, mapper.LocalSession, statement.Statement, paramObject);
            mapper.LocalSession.CreateDataAdapter(scope.IDbCommand).Fill(ds);

return ds;
        }

在这个过程中,我们还可以顺便得出获得SQL语句的方法:

        public static string GetSql(string statementName, object paramObject)
        {
            ISqlMapper mapper = GetMapper();
            IMappedStatement statement = mapper.GetMappedStatement(statementName);
            if (!mapper.IsSessionStarted)
            {
                mapper.OpenConnection();
            }
            RequestScope scope = statement.Statement.Sql.GetRequestScope(statement, paramObject, mapper.LocalSession);

return scope.PreparedStatement.PreparedSql;
        }

下面是我对文中内容的理解:

并不是所有地方都要OO,在IBatis的Java和.NET实现中都支持Dictionary类型的对象.DataTable因为有了DataView的支持而较IDictionary具有一些优势.如果我们需要对数据进行额外的排序或者过滤操作,那么DataTable会更方便一些.因此像这种返回DataSet的方法会使得IBatis更加易用.

但同时感觉,这种方法将IBatis打开了一个缺口,似乎背离了IBatis的设计初衷——创建一个优秀的“Persistence Ignorance” domain model。比如现在,我们进行一次查询,获得“Plain Old CLR Objects”,看起来输入是与数据持久化相关的,而输出则完全集中在了领域模型上。

因此,返回DataSet的方法可能会导致不好的设计,从长远来看,也模糊了IBatis的初衷和意图。

转载于:https://www.cnblogs.com/gooddasenlin/archive/2011/04/08/2009529.html

关于在IBatis中返回DataSet相关推荐

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

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

  2. ibatis insert mysql_让iBatis中的insert返回主键

    让iBatis中的insert返回主键 [ibatis insert 返回 自增主键] parameterClass="RemarkInfo"> insert into SG ...

  3. 在pytorch中自定义dataset读取数据2021-1-8学习笔记

    在pytorch中自定义dataset读取数据 utils import os import json import pickle import randomimport matplotlib.pyp ...

  4. 存储过程中返回结果集

    存储过程中返回结果 从存储过程中返回结果有三种方式: 1. 返回结果集 这是客户端应用程序返回结果的最通用的方法.结果集是通过使用select语句选择数据产生的.结果集可以从永久表.临时表或局部变量中 ...

  5. python中id地址什么意思_id()在python中返回的对象地址是什么?

    在函数返回时有一个身份的识别,就像我们寄包裹的时候都有一个单号,便于大家随时跟踪它的进度.我们今天要讲的内置函数id()同样可以看作是用来进行身份识别的.那么我们进一步思考,id()最后返回的地址究竟 ...

  6. Dictionary作为数据源绑定,调用c++库中返回为BYTE*的函数,listView项排序

    最近在做一个电子档案管理的项目.现在还处于初期,只是做一个简单demo拿去跟客户演示.至于最后谈不谈得下来,到底做不做,反正我是不看好,但没因为这样就马马虎虎.草草了事.这个项目算是b/s加c/s混合 ...

  7. 深入分析ADO.NET中的DataSet对象

    ADO.NET是.net Framework SDK中用以操作数据库的类库的总称.而DataSet类则是ADO.NET中最核心的成员之一,也是各种开发基于.Net平台程序语言开发数据库应用程序最常接触 ...

  8. Python Numpy中返回下标操作函数-节约时间的利器

    如果觉得Python慢,那么首先应该想到是不是没有用对. Numpy是Python中自带的一个数值计算库,包含了大量数值计算的常用方法.其底层大量使用C/C++(超过50%的代码量),矩阵计算调用LA ...

  9. 函数中返回char *类型

    记录一次比较容易引起混淆的地方. #include <stdio.h> char *str(void) {return "nihao\n"; }int main() { ...

最新文章

  1. Xcache安装与使用
  2. 了解大脑的“小情绪”,轻松成为“效率达人”
  3. 路飞学成-Python爬虫实战密训-第3章
  4. python心跳包原理_Python 用心跳(UDP包)探测不活动主机
  5. 【学习笔记:计算几何基础3】 Convex Hull
  6. 解决Rocketdock在win7上重启后不能保存设置和图标的问题
  7. Win10PE网络版.iso UEFI、BIOS双启动
  8. 云队友丨张朝阳不再狂妄,搜狐的艰难复苏路
  9. Windows7电脑自动断网的解决方法
  10. android banner 不轮播,使用Android Banner来设置一个轮播图
  11. ssd的smt_SMT 工厂基础参数要求
  12. 复制一颗二叉树(java语言)
  13. 分享830个蜘蛛IP段(分析1G日志得)
  14. ubuntu 更新系统源
  15. 海地PVC/COC认证
  16. 初学者——Java之实现简易俄罗斯方块
  17. .net中,日志组件 Nlog,SerialLog, Log4Net的用法
  18. Win10系统下安装和配置MathType7
  19. qt android 中文乱码,Qt与MSVC中文乱码问题的解决方案
  20. 《PR基础教程入门篇-学习笔记》-012

热门文章

  1. xml解析总结-常用需掌握
  2. 经典SQL[私家珍藏]
  3. 【并查集】Union Find
  4. Linux操作Oracle(14)——Oracle数据库 使用VMware虚拟网卡 配置 TnsListener 解决 无法启动的问题
  5. 阿里云_数加平台类HQL的那些坑
  6. 阿里腾讯都在做的可视化大屏,我用这工具里的100个模板实现了
  7. mysql的请求分发,基于 gorilla/mux 实现路由匹配和请求分发:服务单页面应用
  8. vite.js项目创建流程图
  9. 使用单/多线程执行程序展示
  10. centos系统 查看当前python执行的进程