热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

DataRabbit企业级的数据存取框架(00)--序

(最新版本为DataRabbit4.0,请到本文末下载处下载。最后更新:2009.09.15)DataRabbit支持基于关系(Relation)的数据库操作和基于ORM的数据库操

   (最新版本为DataRabbit 4.0,请到本文末下载处下载。最后更新:2009.09.15)

   DataRabbit支持基于关系(Relation)的数据库操作和基于ORM的数据库操作,内置了对Oracle和SqlServer的支持,并且可以通过插件的方式对其它数据库类型提供支持。DataRabbit中的所有访问器(都实现了ITransactionAccesser接口)即可以在事务上下文中访问数据库,也可以在非事务中访问数据库。使用DataRabbit,几乎可以避免98%的需要在程序中手写的Sql语句,这样,你的程序会更安全,并且更容易修改和维护。

   在正式了解DataRabbit之前,也许先读一下《DataRabbit的背后(1)-―走进DataRabbit上下文》效果更好,这篇文章为了解DataRabbit做了一些必要的铺垫。

1.DataRabbit中的访问器  
   DataRabbit主要包含以下几种访问器:
(1)针对ORM的访问器(IOrmAccesser)(及 续篇)
(2)针对数据库的Relation访问器(IRelationAccesser)
(3)针对Table的Relation访问器(ITableAccesser)
(4)针对存储过程的访问器(ISPAccesser)
(5)基于ORM的对象关系加载器(IEntityRelationLoader)
(6)数据大纲访问器(IDataSchemaAccesser)

     所有的访问器都向使用者屏蔽了地层的IDbCommand、IDbConnection等对象,使用者不必再关心打开连接、执行命令、关闭连接等繁琐底层的操作。这些访问器都从ITransactionAccesser接口继承,它们的类图如下所示:



   DataRabbit的ORM非常轻量,它具有如下特点:
(1)使用Emit与泛型技术实现ORM访问器(IOrmAccesser),与手写SQL的效率几乎相当。
(2)使用ORM不需要任何配置文件(采用“约定”优于“配置”原则,Entity对象与数据表结构完全一致,可由工具EntityCreator自动生成)
(3)可以将数据库之间的主从表关系映射为Entity之间的关系,并可以依据主外键来加载Entity。
(4)对数据库表的结构没有任何要求。(比如,有的ORM框架要求数据表必须具有主键等)

(5)支持高效的“部分更新(partial update)”。

2.大纲操作 

   DataRabbit支持与数据大纲(DataSchema)相关的操作,比如提取某个数据库表的大纲,或者依据某个大纲创建对应的数据库表。这可以通过 IDataSchemaAccesser 接口来完成。与大纲操作相关的类图如下所示:




3.数据分页
   可以通过IPagerManager接口来进行数据分页操作(全部采用程序实现,不需要存储过程的支持)。



4.DataRabbit入口 -- TransactionScopeFactory     

     作为使用DataRabbit框架的入口点,一个TransactionScopeFactory实例就对应着一个数据库。

     也可以这么说,针对一个特定的数据库,我们的应用只需要维护一个TransactionScopeFactory实例即可。

DataConfiguration config  =   new  DataConfiguration(DataBaseType.SqlServer,  " localhost " " sa " "pwd " " TestDB " null );
TransactionScopeFactory transactionScopeFactory 
=   new  TransactionScopeFactory();
transactionScopeFactory.DataConfiguration 
=  config;            
transactionScopeFactory.Initialize();

     通过TransactionScopeFactory我们可以获取TransactionScope对象,而上述的各种访问器、大纲操作者、分页管理器等等实例都可以通过TransactionScope中的对应方法获得。

   比如,获取针对表Student的ORM访问器:

IOrmAccesser < Student >  stuOrmAccesser  =  transationScope .NewOrmAccesser < Student > ( null );
//获取所有年龄大于20岁的学生
IList stuList = stuOrmAccesser.GetMuch(new Filter(Student._Age, 20, ComparisonOperators.Greater));

     关于如何更好的使用DataRabbit框架,可以参考 使用DataRabbit的最佳实践 一文。

 

5.对N层架构的支持
   DataRabbit如何更好地融合到N层架构中了?如何支持BL层、Data层、BEM层?
(1)TransactionScope,事务范围,从某个事务返回对象获取的各种访问器实例都工作于同一个事务上下文中。TransactionScope实例通常在Business Flow子层中创建。
(2)将DataRabbit融入架构

(3)三层架构中

(4)DataRabbit 对中大型高并发应用的支持

   在后续的文章中,会逐一介绍上面提到的各个DataRabbit组件,下面给出DataRabbit框架的最新版本dll下载,以及一个非常简单的ORM示例源程序,大家可以仿这段程序尝试一下DataRabbit的ORM功能。


资源下载:
1.最新版本DataRabbit 4.0下载(内含EntityCreator 和 DataRabbit 完全手册V3.0 以及最新的Demo源码)!(最后上传于 2009.09.15

其它文章:
(1)DataRabbit 3.0 ORM性能大幅度提升!
(2)DataRabbit 3.0 与 Linq to sql 性能比较
(3)Batch Insert 批插入!
(4)实体缓存EntityCache  (2008.05.28)


可以加入QQ群:37677395  一起探讨DataRabbit

 


推荐阅读
  • 我使用Laravel5时遇到问题.当我运行“phparitsanmigrate”时,我收到了这个错误***************************************A ... [详细]
  • 一、如果使用默认的1521端口,让实例自动注册到该监听上,那么local_listener无需设置,listener.ora文件按照正常方 ... [详细]
  • DBA的日常运维–Part11.活动状态检查 ... [详细]
  • 一、问题开发中遇到将其它数据库数据插入到mysql数据库表中一直会报类似如下错误:Incorrectstringvalue:\xE6\x88\x91forcolumn ... [详细]
  • mysql oneproxy稳定吗_Mysql 中间件 oneProxy总结
    建议使用之前把官方的文档全部通读一遍这里提供一个我的网盘地址oneproxy百度网盘0.先对oneproxy有个大概的了解,知道他所处的位置1.MySQL服务器创建t ... [详细]
  • 配置OracleACFS集群文件系统
    配置OracleACFS集群文件系统               2012-07-1010:18:39标签:asmacfs版权声明:原创作品,谢绝转载!否则将追究法律责任。     ... [详细]
  • 数据库用久了难免会出现没有回收的空间,如果空间太大可使用以下方法进行回收。查询用个表所占用的空间:SELECTtablespace_name,100*(sum_max-sum_alloc+nvl(su ... [详细]
  • 用户管理_用户管理的小项目
      之前学习链表数据结构的时候,写过(相信很多人都做过)dos窗口版的学生管理系统,通过输入数字来实现CURD学生的信息,顶多就是把数据写入文件来存储数据 ... [详细]
  • Mysql安装和初步使用
    2019独角兽企业重金招聘Python工程师标准一、安装1、下载及安装:官网:https:downloads.mysql.comarchivesc ... [详细]
  • 以下数据来源于TRDIR,TRDIRT,有一些对应系统的事务,有具体的T-CODE.以下我会标注一些我个人认为会常用到的.程序功能描述RSORA000O ... [详细]
  • 我的LINUX学习之路之二十一之web服务器简单搭建
    今天说说如何搭建HTTP服务器!目的:使用“多IP地址”方法实现多个网站。使用“主机头名”方法实现多个网站。使用“多端口”方法实现多个网站。这回用图形界 ... [详细]
  • 关于初学PHP时的知识积累总结【PHP】
    后端开发|php教程PHP,知识积累后端开发-php教程PHP基础A、初识PHPPHP是与HTML混合使用的嵌入式语言。1、PHP标记默认标记短标记,需在php.ini中将shor ... [详细]
  • 也就是|单打_.net Core 自我学习随笔——工作的核心:增删改查
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了.netCore自我学习随笔——工作的核心:增删改查相关的知识,希望对你有一定的参考价值。上次介绍了一下如何进行连接 ... [详细]
  • 本文介绍了数据库的存储结构及其重要性,强调了关系数据库范例中将逻辑存储与物理存储分开的必要性。通过逻辑结构和物理结构的分离,可以实现对物理存储的重新组织和数据库的迁移,而应用程序不会察觉到任何更改。文章还展示了Oracle数据库的逻辑结构和物理结构,并介绍了表空间的概念和作用。 ... [详细]
  • 本文介绍了如何找到并终止在8080端口上运行的进程的方法,通过使用终端命令lsof -i :8080可以获取在该端口上运行的所有进程的输出,并使用kill命令终止指定进程的运行。 ... [详细]
author-avatar
mobiledu2502926037
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有