我在上一篇博客中简单说明了一个面向内存数据集的“ORM”的实现方法,也提到我的设计实现或许不能称之为“ORM”,姑且称之为 S-ORM吧。

可能有些小伙伴没有理解我的思路和目的,与传统ORM框架做了简单比较,事实上我要做的事情并非为数据库表结构建立实体对象模型,而是希望使用传统的 ADO.NET 方式来操作数据库,并对 ADO.NET 所得到的结果数据集,进行松散的动态映射;同时提供一些类ORM的自动化方法,简化传统 ADO.NET 对数据库的操作。

再此再次简单说明设计目标:

1.支持所有数据库原生操作(ADO.NET / 基于微软企业库的数据模块)

2.解除与数据库表模型一对应的关系,由开发人员灵活指定映射关系。

3.支持直接使用SQL语句并根据查询结果动态映射。

4.支持调用存储过程并根据查询结果动态映射。

5.支持自动化的事务处理,可自动回滚。

6.支持一对多的映射关系,即一个实体类可以映射到多张表。

7.支持自动填充/补全数据实体类中的数据。

8.高性能,高灵活性,高可维护性。

详细说明可参考我的上一篇博客:http://www.cnblogs.com/sheng_chao/p/4553832.html

在此补充几个应用场景的小例子:

1. 表 User 中有若干字段(>2),现在只想取出其中 2 个字段建立对象实例并序列化发送至客户端。

  定义一个包含所需 2 个字段的对象(假设为 User_A ),通过 S-ORM 提供的 Attribute 指定该对象与数据库表结构的对应关系,使用 Fill 方法自动填充该对象的属性。

    [Table("User")]
public class User_A
{
[Key]
public Guid Id
{
get;
set;
} public string Name
{
get;
set;
} public int Age
{
get;
set;
}
}

填充该对象:

public User_A GetUser_A(Guid id)
{
User_A user = new User_A();
user.Id = id;
if (_dataBase.Fill<User_A>(user))
return user;
else
return null;
}

2. 希望使用 SQL 语句从数据库表中查询数据,将结果实例化为强类型对象实例。

  在此场景中,结果集可能来自于多张表,或者结果集根本就是某些数据的复杂统计结果。与表结构的设计完全无关,使用 S-ORM 非常简单,同上先定义好对象类型,然后使用类似如下方法:

        public List<User_A> GetData(Guid id)
{
List<CommandParameter> parameterList = new List<CommandParameter>();
parameterList.Add(new CommandParameter("@userId", id));
List<User_A> userList = _dataBase.Select<User_A>(
"SELECT * FROM [User] INNER JOIN [Product] ON [User].[Id] = [Product].[UserId] WHERE [User].[Id]= @userId", parameterList);
return userList;
}

在此可以看到, S-ORM 所做的事情非常简单,对 ADO.NET 返回的数据集,与指定的对象类型 User_A ,进行动态映射,得到 User_A 类型的实例集合。

注意:S-ORM 不强制要求对象类型定义与内存数据集字段一一对应,在上一博客中已有详细说明,请参考。

3. 调用存储过程,得到强类型对象集合结果。

  同上例目的基本一致,对于复杂查询,直接使用数据库所提供的强大查询功能:视图,存储过程,自定义函数,将得到的结果集自动化映射为强类型对象实例。

  先定义我们想要的对象类型,不再赘述,然后借助 S-ORM:

public List<Record> GetReport(Guid id)
{
List<CommandParameter> parameterList = new List<CommandParameter>();
parameterList.Add(new CommandParameter("@id", id));
DataSet dataSet = _dataBase.ExecuteDataSet(
CommandType.StoredProcedure, "GetRecord", parameterList, "Result");
List<Record> reportList = RelationalMappingUnity.Select<Record>(dataSet);
return reportList;
}

上面 3 个示例基本代表了 S-ORM 的设计目的,同时 S-ORM 也提供了许多相关的辅助功能,和与传统 ORM 类似的增删改查方法,请参考上一篇博客中的详细介绍。

可参考我的上一篇博客:http://www.cnblogs.com/sheng_chao/p/4553832.html

 

欢迎加我QQ交流探讨,共同学习:279060597,另外我在南京,有南京的朋友吗?

(源码下载)高灵活度,高适用性,高性能,轻量级的 ORM 实现的更多相关文章

  1. VopSdk一个高逼格微信公众号开发SDK(源码下载)

    看之前回复很多说明大家很有热情&文章被误删掉了,不想让有的朋友错失这个高逼格的东西,现在重新发布,这次就直接放出源码,文章最末下载地址. 看之前回复很多说明大家很有热情&文章被误删掉了 ...

  2. spark最新源码下载并导入到开发环境下助推高质量代码(Scala IDEA for Eclipse和IntelliJ IDEA皆适用)(以spark2.2.0源码包为例)(图文详解)

    不多说,直接上干货! 前言   其实啊,无论你是初学者还是具备了有一定spark编程经验,都需要对spark源码足够重视起来. 本人,肺腑之己见,想要成为大数据的大牛和顶尖专家,多结合源码和操练编程. ...

  3. 《编写高质量代码:改善C#程序的157个建议》源码下载

    ==== 目录 前 言第一部分 语言篇第1章 基本语言要素 / 2建议1:正确操作字符串 / 2建议2:使用默认转型方法 / 6建议3:区别对待强制转型与as和is / 9建议4:TryParse比P ...

  4. 高仿精仿微信应用ios源码下载

    微信,超过3亿人使用,能够通过手机网络给好友发送语音.文字消息.表情.图片和视频,还可以分享照片到朋友圈.通过摇一摇.查看附近的人,你可以认识新的朋友.使用扫一扫,你可以扫描二维码.条码.图书和街景. ...

  5. 《大话设计模式》C#/C++版pdf/源码下载

    大话设计模式(带目录完整版)[中文PDF+源代码].zip 下载地址:http://pan.baidu.com/s/1giQP4大话设计模式C++.pdf下载地址:http://pan.baidu.c ...

  6. 【NopCommerce源码架构学习-一】--初识高性能的开源商城系统cms

    很多人都说通过阅读.学习大神们高质量的代码是提高自己技术能力最快的方式之一.我觉得通过阅读NopCommerce的源码,可以从中学习很多企业系统.软件开发的规范和一些新的技术.技巧,可以快速地提高我们 ...

  7. yate: windows下源码下载,配置,编译

    源码下载:使用svn下载checkout:http://voip.null.ro/svn/yate/trunk 配置:(本人使用的是vs2008,故下载的qt工具都是对应2008) 1. 下载并安装q ...

  8. Android斗地主棋牌游戏牌桌实现源码下载

    本次给大家分享下Android斗地主棋牌游戏牌桌实现源码下载如下: 为了节约内存资源,每张扑克牌都是剪切形成的,当然这也是当前编程的主流方法. 1.主Activity package com.biso ...

  9. 让你心动的 HTML5 & CSS3 效果【附源码下载】

    这里集合的这组 HTML5 & CSS3 效果,有的是网站开发中常用的.实用的功能,有的是先进的 Web 技术的应用演示.不管哪一种,这些案例中的技术都值得我们去探究和学习. 超炫的 HTML ...

  10. 分享一组很赞的 jQuery 特效【附源码下载】

    作为最优秀的 JavaScript 库之一,jQuery 不仅使用简单灵活,同时还有许多成熟的插件可供选择,它可以帮助你在项目中加入漂亮的效果.这篇文章挑选了8个优秀的 jQuery 实例教程,这些  ...

随机推荐

  1. Codeforces Round #379 (Div. 2)

    A ~~ B ~~ C 对于第二种方法,我们可以任取一个换c[i]个potions,花费d[i]:或者是不取,我的做法就是枚举这些情况,得到剩余的s,再尽量优的获取小的a[i]: 枚举+二分 #inc ...

  2. Java集合框架练习-计算表达式的值

    最近在看<算法>这本书,正好看到一个计算表达式的问题,于是就打算写一下,也正好熟悉一下Java集合框架的使用,大致测试了一下,没啥问题. import java.util.*; /* * ...

  3. [转]在Eclipse中使用JUnit4进行单元测试(中级篇)

    我们继续对初级篇中的例子进行分析.初级篇中我们使用Eclipse自动生成了一个测试框架,在这篇文章中,我们来仔细分析一下这个测试框架中的每一个细节,知其然更要知其所以然,才能更加熟练地应用JUnit4 ...

  4. oracle(sql)基础篇系列(三)——数据维护语句、数据定义语句、伪列

      DML语句 insert 向表中插入新的记录   --三种插入方式 --(1)不写字段的名字,直接按照字段的顺序把值逐个往里插 insert into dept2 values(50,'DANAM ...

  5. 树链剖分+线段树 HDOJ 5029 Relief grain(分配粮食)

    题目链接 题意: 分粮食我就当成涂色了.有n个点的一棵树,在a到b的路上都涂上c颜色,颜色可重复叠加,问最后每一个点的最大颜色数量的颜色类型. 思路: 首先这题的输出是每一个点最后的情况,考虑离线做法 ...

  6. HDU4787 GRE Words Revenge(AC自动机 分块 合并)

    题目 Source http://acm.hdu.edu.cn/showproblem.php?pid=4787 Description Now Coach Pang is preparing for ...

  7. 1.2 控制器 view 的创建和加载

    本文并非最终版本,如有更新或更正会第一时间置顶,联系方式详见文末 如果觉得本文内容过长,请前往本人 “简书”       加载优先顺序: 1.用系统的loadView方法创建控制器的视图 2.如果指定 ...

  8. 从零开始山寨Caffe·柒:KV数据库

    你说你会关系数据库?你说你会Hadoop? 忘掉它们吧,我们既不需要网络支持,也不需要复杂关系模式,只要读写够快就行.    ——论数据存储的本质 浅析数据库技术 内存数据库——STL的map容器 关 ...

  9. Hive 笔记

    DESCRIBE EXTENDED mydb.employees  DESCRIBE EXTENDED mydb.employees DESCRIBE EXTENDED mydb.employees ...

  10. myeclipse中source not found问题解决办法

    myeclipse中出现source not found是因为你所引用的JavaEE Generic Library没有关联源码,如下图: 下面给出该问题的解决办法: 步骤一:去下载apache-to ...