(开头先从网上抄些ORM的介绍)
什么是ORM?
ORM,即Object-Relational Mapping(对象关系映射),它的作用是在关系型数据库和业务实体对象之间作一个映射。ORM也可理解是一种规范,具体的ORM框架可作为应用程序和 数据库的桥梁。这样,我们在具体的操作业务对象的时候,就不需要再去和复杂的SQL语句打交道,只需简单的操作对象的属性和方法。
为什么需要ORM
面向对象的程序设计语言,代表了目前程序设计语言的主流和趋势,其具备非常多的优势,比如:
1、 面向对象的建模、操作。
2、 多态、继承。
3、 摒弃难以理解的过程。
4、 简单易用,易理解性。
但数据库的发展并未与程序设计语言同步,而且,关系数据库系统的某些优势,也是面向对象的语言目前无法解决的。比如:
1、 大量数据操作查找、排序。
2、 集合数据连接操作、映射。
3、 数据库访问的并发、事务。
4、 数据库的约束、隔离。
面对这种面向对象语言与关系数据库系统并存的局面,采用ORM就变成一种必然。
InstantObjects(简称IO)简介
IO是用DELPHI实现的ORM框架(
http://www.instantobjects.org/)。IO有以上描述的大部分优点,同时还有以下特点(演示IO自带的DEMO:PrimerCross):
1、 支持多种数据库;
2、 支持自动创建数据库和更新数据库结构;
3、 提供集成到IDE里面的数据模型设计器;
4、 支持包括BLOB、MEMO等多种数据类型;
5、 支持1对多、多对多数据关系的映射;
6、 提供IO对象的缓存与共享,生命周期的管理;
7、 提供IO对象BIN、XML格式的导入导出功能;
8、 提供IQL查询语言;
IO框架模型介绍
1、 IO对象类图
该类图显示出了IO是如何设计ORM的运行期实体对象的。
IO充分利用了DELPHI的RTTI机制,动态生成实体对象的属性,实现丰富的数据映射功能。不过这种侵入式设计,同时带来了一定的复杂性。
2、 IO对象元数据类图
元数据记录的是实体对象与数据库映射的信息。分两类:类的元数据、表的元数据。IO框架根据元数据类,实现具体的数据到对象、对象到数据映射功能。
3、 数据库连接类图
这里列出的是IO框架数据库部分的设计类图。
IO框架使用了一套相对比较复杂的设计,目的是使后 台支持SQL型数据库(MsSQL、FB)、游览型数据库(Dbisam、Access、XML数据库)。IO在这个设计基础上,提供了两种扩充支持数据 库的方式,为框架提供了灵活的扩充功能。图中列出了当前计量使用的IBX控件扩充类(类名以“TInstantIBX”开头)。
这个灵活通用的设计,同时带来了效率的问题。不能很好得利用SQL型数据库的大量数据操作查找、排序等优点。在计量项目中,部分针对IO的修改与扩展就是为了解决这个效率问题。
4、 导入导出类图
这图中列的类,提供了实体对象BIN、XML格式的导入导出功能。
导入导出功能,方便应用程序实现数据模板,数据复制等应用功能。
5、 数据游览类图
这部分是IO框架为了满足快速的数据感知控件开发而设计的。为实体对象的查询、游览提供数据访问功能(TdataSet功能)。
由于数据全部通过访问实体对象而来,故在访问数据前必须先创建、初始化好实体对象,在效率与内存占用上都比一般的数据集差。
6、 IQL类图
上面ORM介绍中提到“查询语言,是持久化操作中很重要的一个方面,通过面向对象而非面向数据库的查询语言查询数据,避免程序的SQL语句紧密耦合”。不过当前很少使用到IQL语言,对这方面的了解也比较少。
7、 异常机制类图
时序图
用ID获取IO对象
IO对象保存过程
IO对象对应数据记录删除过程
IO框架的优化讨论1、 增加属性的迟加载(Lazy Load)功能
增加这个功能的目的是为了提高实体对象实例化速度,减少内存使用。小骆在2.0IO版本中增加过该功能。
2、 增加属性对象的缓存机制
IO实体对象的属性是一个真实的对象,一个实体对象会含有多个属性对象,属性对象的创建与释放次数是很多的。由于属性对象种类比较固定,可以考虑增加属性对象缓存池,解决大量的对象创建、释放带来的效率慢及内存碎片问题。
(以上UML图,都是用ModelMaker制作)
本文出自 “seewind” 博客,请务必保留此出处http://seewind.blog.51cto.com/249547/56111
分享到:
相关推荐
Delphi ORM的介绍解释说,虽然数据库设计很困难,但数据库编程(即操作、提取、过滤和操作数据)则更加困难。ORM框架为您访问和管理数据库中的数据提供了一种更简单的方法。通过在应用程序和数据访问语言(SQL、LINQ等)...
一个不错的ORM持久层,DELPHI版的,在D7下测试通过。 并开放了接口,还蛮好用的。 希望在D7下像JAVA/C#一样的快速开发不错的一个利器。并且提供全部源码。如果有什么好的见意最好可以发一份给我。谢谢。
Spring整合其他ORM框架:Spring整合其他ORM框架整合的时候所需要的jar包spring-orm-3.2.0.RELEASE.jar
能实现基本的数据库操作能实现基本的数据库操作
IOC容器:Spring Web框架:SpringMVC ORM框架:Mybatis数据源:C3P0日志:log4j前端框架:Bootstrap运行环境jdk8 + tomcat8 + mysql + Eclipse + maven项目技术:spring + spring mvc + mybatis + bootstrap + ...
Ebean:开源ORM框架 Ebean是一个Java实现的开源ORM框架,具有数据访问快速和易于学习、使用等特点。
此源码包含数据库脚本文件
Object Relational Mapping Using TMS Aurelius 含示例源代码,书籍本身为epub文件,可以用Win10自带的Edge浏览器直接打开。
Neo是一个基于JDBC开发的至简化框架,采用ActiveRecord的思想进行设计,名字源于《黑客帝国》男主角名字,为连接虚拟与现实的救世主,取名Neo寓意为链接数据和逻辑。源头来自于之前接触的一些不错的Orm框架,也有...
可以使Delphi拥有像Hibernate一样的ORM数据能力,是时候开始不要再使用SQL语句来编程了,你真的OOP了吗?
fohu.EntitySharp:一个封装了ADO.NET的轻量级的开发框架,轻量级中的轻量级的.NET ORM开发框架,虽然轻量级依然不忘集成数据检验组件
Remobjects Framework 优秀的ORM持久层框架 亲测Client可用 有源码 亲测Server可用 有源码 新测DB可用 RO接口定义亲测无法通过,自己想办法修改 有源码 1. config 文件夹下是配置文件 2. Public 文件夹存放公共PAS...
手写ORM框架笔记
John Kouraklis ISBN-10: 1484250125 Year: 2019 Pages: 253 Language: English File size: 6 MB
Sqlite ORM 是一个简单的C#类,对Sqlite的操作进行了封装,主要功能包括:表定义、生成,访问,更新等,其中,支持,多表的连接操作,语法类似Linq语法,使用非常方便,附加了使用说明文档。 例如,添加记录操作为...
fohu.EntitySharp:一个轻量级中的轻量级的.NET ORM开发框架,虽然轻量级依然不忘实体的扩展属性和集成数据检验组件
简单高效的ORM框架
经过我的不懈努力,我的数据处理框架终于又上了一个新的台阶了。今天我真的非常高兴,因为我终于可以用我自己掌握和积累的知识设计和开发出一个自己认为不平凡的“东西”。它可以极大的简化我平时开发应用时可能出现...
使用运算符重载,实现 ORM 框架里的 INSERT、UPDATE、DELETE 和 SELECT 语句动态生成。SELECT 语句支持 INNER JOIN、LEFT OUTER JOIN 和RIGHT OUTER JOIN 多表联合查询,但不支持同一表的联合查询。 代码中只实现了 ...