ORMapping

1. ORMapping 概念
ORM(对象关系映射,英语:Object Relational Mapping,简称ORM,或O/RM或O/R mapping)的实质就是将关系数据库中的业务数据用对象的形式表示出来,并通过面向对象的方式将这些对象组织起来,实现系统业务逻辑的过程。
在ORM过程中最重要的概念是映射(Mapping),通过这种映射可以使业务对象与数据库分离。从面向对象来说,数据库不应该和业务逻辑绑定到一起,ORM则起到这样的分离作用,使数据库层透明,开发人员真正的面向对象。

2. 为什么要使用ORM
1.提高学习开发效率,降低开发成本
使用ORM可以大大降低学习和开发成本。在实际的开发中,真正对客户有价值的是其独特的业务功能,而现在的现状是我们花费了大量的时间在编写数据访问,CRUD方法,包括后期的Bug查找,维护等也会花费相当多的时间在数据处理上,ORM框架已经把数据库转变成了大家熟悉的对象,开发人员将只需要了解面向对象开发就可以实现数据库应用程序的开发。
2.简化代码,减少BUG数量
通过建立ORM系统,能够大量减少程序开发代码,实现ORM后,开发数据层就比较简单,大大减少了出错机会。
3.提高性能
同时通过Cache的实现,能够对性能进行调优,实现了ORM区隔了实际数据存储和业务层之间的关系,能够对每一层进行单独跟踪,增加了性能优化的可能。
4.隔离数据源,可以很方便的转换数据库
利用ORM可以将业务层与数据存储隔开,开发人员不需要关系实际存储的方式,如果需要把SQL Server数据库换成ORACLE数据库,只需要切换数据中心就可,不需要修改程序。
3. ORMapping职责
1. 将对象所持有的数据持久化到数据源中
2. 按需从数据源中获取数据拼装成对象
3. 屏蔽直接对数据源的操作,消除异构数据源对程序的影响
4. 进行校验、计算、数据多语言等处理
4. ORMapping主要接口方法
接口类:com.kingdee.bos.dao.ormapping.IORMappingDAO
实现类:com.kingdee.bos.dao.ormapping.ORMappingDAO
主要方法:
1. 获取接口对象getInstance
2. 获取业务对象getValue
3. 获取业务对象集合getCollection
4. 获取主键集合getPKList
5. 获取满足条件的数据数目getCount
6. 更新业务对象update
7. 指定字段更新 updatePartial
8. 批量更新 updateBatch
9. 删除 delete
10. 新增 addnew
11. 验证是否满足条件(验权)accept
12. 验证数据是否存在exists
5. ORMapping结构组成
ORMapping通过结合元数据,将业务层的数据转换成KSQL,再持久化到数据源中,将业务层与数据存储隔开。

ORMapping的基本处理行为-持久数据

持久数据逻辑关键类方法

ORMapping的基本处理行为-获取数据

获取数据逻辑关键类方法
com.kingdee.bos.dao.ormapping.innerGetCollection getValue/getCollection均会到该逻辑.
ObjectReader reader = reader();
ObjectReader. innerSelect -> EntityAccess.select方法根据entityObject,EntityViewInfo(包含selector,filter,sorter等)拼装出sql,并查询出结果集,用结果集构造Collection。
对于需要查询分录等详细信息时,在ObjectReader类中innerSetChildObject 方法,进一步构造分录的取数sql,并获取结果集,将结果集写入上层Collection中
6. ORMapping与外界交互方式
ORMapping DAO对象的构成
Context --- 上下文
EntityObjectInfo --- DAO操作的根对象的元信息描述
Connection --- 连接( DAO不负责连接释放、事务等与连接相关的处理)
传入信息
ObjectValue --- 值对象
EntityViewInfo --- 包括Selector、Filter、Sorter、Top等信息,DAO根据这些信息来按需从数据源中获取数据以及填充对象;
EntityViewInfo. getEntryFilters() ---分录过滤条件
EntryWhere
返回主对象及所有满足条件的子对象
EntryALLWhere
当所有子对象均满足条件时返回主对象
EntryAnyWhere
当任何一个子对象满足条件时返回主对象
分录权限
不实际进行分录过滤,将分录过滤条件转变形式,使之生成boolean型结果值,用于标记是否满足条件
EntryFilter设置
支持设置多级分录权限过滤条件
调用权限服务
OQL --- EntityViewInfo的文本化描述,可以与EntityViewInfo互相转换
IObjectPK --- 值对象的主键,通常用于获取或更新记录
ORMapping
声明:除非特别标注,否则均为本站原创文章,转载时请以链接形式注明文章出处。如若本站内容侵犯了原著者的合法权益,可联系本站删除。



