由于项目上对单据的性能格外要求,所以特别看了看ORMapping这一层的实现,主要是为了自己分析问题。
ORMapping的学习(一):整体认知
1、ORMapping说明
(1)包的命名:
dao.ormapping
dao.ormapping.impl
dao.ormapping.lazyload--惰性加载处理
dao.ormapping_ex--从功能来看,ex意味extend,是对ormapping功能的扩展
.ast
.ast.expr
.parser
.runtime
.runtime.dataquery
.runtime.objectquery
.runtime.objectquery.impl
.service
(2)主接口定义
IDataAccessObject
IORMappingDAO
ORMappingDAO BillORMappingDAO
2、API设计
public IObjectValue getValue(IObjectPK pk) throws DataAccessException {
getValue(pk,selector);
}
public IObjectValue getValue(IObjectPK pk, SelectorItemCollection selector){}
public IObjectValue getValue(IObjectPK pk, SelectorItemCollection selector,boolean isBaseOnSelector) throws DataAccessException{}
public IObjectValue getValue(IObjectPK pk, SelectorItemCollection selector,SorterItemCollection sorter) throws DataAccessException{}
public IObjectValue getValue(IObjectPK pk, SelectorItemCollection selector,SorterItemCollection sorter,boolean isBaseOnSelector) throws DataAccessException{}
private IObjectValue innerGetValue(EntityViewInfo view, boolean isBaseOnSelector){}
参考以上方法,对API的设计,可遵循如上的格式:
(1)代码的高度重用
(2)可维护性高
(3)层次分明
3、主要接口定义
工厂类
ObjectCUDFactory
ObjectCreator -- 负责数据的创建
ObjectRemover -- 负责数据的删除
ObjectUpdater -- 负责数据的更新
ORMAppingDAO中主要是调用如上的方法进行数据的操作
4、常用工具方法
com.kingdee.bos.dao.ormapping.ORMappingDAOUtils
com.kingdee.bos.dao.ormapping.Utils
5、事务处理框架
初步来看是使用了springframework的实现
6、猜想:
(1)数据更新时慢的原因,可能是在更新之前需要查询一次
(2)数据保存慢的原因,继续研究
《待续》