由於項目上對單據的性能格外要求,所以特別看了看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)數據保存慢的原因,繼續研究
《待續》