金蝶云苍穹之数据服务
原创约 1596 字大约 5 分钟...
50-金蝶云苍穹之数据服务.md
注意
本博文仅供学术研究和交流参考,严禁将其用于商业用途。如因违规使用产生的任何法律问题,使用者需自行负责。
ORM概述
- 什么是ORM?
对象关系映射(Object Relation Mappint)的简称,把实体模型映射到数据库中,提供对象的操作,在数据库中则体现为CRUD。
市面上有哪些开源ORM框架?
Hibernate
Mybatis
JPA
为什么需要ORM?
多数库访问的需要: 应用主库、基础资料、工作流、日志、权限
自动处理繁琐的关联操作: 分录、子分录、多语言表、扩展表(动态)、多选基础资料
基于表单实体元数据,更符合业务逻辑
集成计算框架接口,可便捷地使用复杂的计算、大数据量的访问
BusinessDataServiceHelper(业务操作)
- 创建对象
public static DynamicObject newDynamicObject(String entityName)
{
//创建单据对象
DynamicObject bill = BusinessDataServiceHelper.newDynamicObject("demo_purapplybill");
//设置单据属性
bill.set("billno",System.currentTimeMillis());
bill.set("billstatus",'A');
bill.set("org",RequestContext.get().getOrgId());
bill.set("creator",RequestContext.get().getUserId());
//获取单据体集合
DynamicObjectCollection entrys = bill.getDynamicObjectCollection("entryentity");
//获取单据体Type
DynamicObjectType type = entrys.getDynamicObjectType();
//根据Type创建单据体对象
DynamicObject entry = new DynamicObject(type);
//设置单据体属性
entry.set("price",12);
entry.set("qty",24);
//添加到单据体集合
entrys.add(entry);
//保存
SaveServiceHelper.saveOperate("demo_purapplybill",new DynamicObject[] {bill});
}
从数据库中加载单个对象
loadSingle
- public static DynamicObject loadSingle(Object pk, DynamicObjectType type)
- public static DynamicObject loadSingle(Object pk, String entityName)
- public static DynamicObject loadSingle(Object pk, String entityName, String selectProperties)
- public static DynamicObject loadSingle(String entityName, String selectProperties, QFilter[] filters)
从缓存中加载单个对象
loadSingleFromCache
- public static DynamicObject loadSingleFromCache(Object pk, String entityName)
- public static DynamicObject loadSingleFromCache(String entityName, QFilter[] filters)
- public static DynamicObject loadSingleFromCache(Object pk, String entityName, String selectProperties)
- public static DynamicObject loadSingleFromCache(String entityName, String selectProperties, QFilter[] filters)
- public static DynamicObject loadSingleFromCache(Object pk, DynamicObjectType type)
Load(从数据库加载多个对象)
- public static Object[] load(Object[] pkArray, IDataEntityType type)
- public static DynamicObject[] load(Object[] pkArray, DynamicObjectType type)
- public static DynamicObject[] load(String entityName, String selectProperties, QFilter[] filters)
- public static DynamicObject[] load(String entityName, String selectProperties, QFilter[] filters, String orderBy)
- public static DynamicObject[] load(String entityName, String selectProperties, QFilter[] filters, String orderBy, int top)
- public static DynamicObject[] load(String entityName, String selectProperties, QFilter[] filters, String orderBy, int pageIndex, int pagesize)
loadFromCache(从缓存中加载多个对象)
- public static Map<Object, DynamicObject> loadFromCache(Object[] pkArray, DynamicObjectType type)
- public static Map<Object, DynamicObject> loadFromCache(Object[] pkArray, String entityName)
- public static Map<Object, DynamicObject> loadFromCache(String entityName, String selectProperties, QFilter[] filters)
- public static Map<Object, DynamicObject> loadFromCache(String entityName, String selectProperties, QFilter[] filters, String orderBy)
- public static Map<Object, DynamicObject> loadFromCache(String entityName, QFilter[] filters)
- public static Map<Object, DynamicObject> loadFromCache(DynamicObjectType type, QFilter[] filters)
Qfilter-查询条件构造器
QFilter f1 = new QFilter("name","like","kingdee%");
//表达式比较(最后一个参数=true)
QFilter f2 = new QFilter("creator.id","=","auditor.id",true);
//等同于f2
QFilter f3 = QFilter.of("creator.id=auditor.id");
// 值比较务必用?否则认为是比较表达式。
QFilter f4 = QFilter.of("period.id=? and accountView.number=?",324324132423L,"1002");
//链式(qq):在一个QFilter链里,不能存在跨对象的or关系,否则无法拆分sql进行查询。
QFilter q1 = QFilter.of("name=?","kingdee");
QFilter q2 = QFilter.of("number=?","xx");
QFilter q3 = QFilter.of("bizDate>=?",new Date());
List<long> idList = new ArrayList<>();
//add to list ...
QFilter q4 = QFilter.of("id in(?)",idList);
QFilter qq = q1.and(q2).or((q3.and(q4)));
//是否为空
String property = "name";
//等同于QFilter.of("name is not null");
QFilter t1 = QFilter.isNotNull(property);
//等同于QFilter.of("name is null");
QFilter t2 = QFilter.isNull(property);
// 是否存在:参数务必是对象的主键
String pk = "creator.id";
QFilter t3 = QFilter.exists(pk);
QFilter t4 = QFilter.notExists(pk);
SaveServiceHelper(数据保存)
保存对象到数据库
- public static Object[] save(IDataEntityType type, Object[] dataEntities)
- public static Object[] save(DynamicObject[] dataEntities)
调用业务对象的保存操作,会触发操作校验,操作插件等服务
- public static OperationResult saveOperate(String entityNumber, DynamicObject[] dataEntities)
- public static OperationResult saveOperate(String entityNumber, DynamicObject[] dataEntities, OperateOption option)
- public static OperationResult saveOperate(String operationKey, String entityNumber, DynamicObject[] dataEntities)
- public static OperationResult saveOperate(String operationKey, String entityNumber, DynamicObject[] dataEntities, OperateOption option)
DeleteServiceHelper(数据删除)
- 直接从数据库删除
- public static void delete(IDataEntityType type, Object[] pks)
- public static int delete(String entityName, QFilter[] qFilters)
- 调用业务对象的删除操作,会触发删除校验,插件等服务
- public OperationResult deleteOperate(String operationKey, String entityName, Object[] pks)
- public OperationResult deleteOperate(String operationKey, String entityName, Object[] pks, OperateOption option)
- public OperationResult deleteOperate(String entityName, Object[] pks)
- public OperationResult deleteOperate(String entityName, Object[] pks, OperateOption option)
QueryServiceHelper(数据查询)
查询平铺对象
- public static DynamicObjectCollection query(String entityName, String selectFields, QFilter[] filters)
- public static DynamicObjectCollection query(String entityName, String selectFields, QFilter[] filters, String orderBys)
- public static DynamicObjectCollection query(String entityName, String selectFields, QFilter[] filters, String orderBys, int top)
- public static DynamicObjectCollection query(String algoKey, String entityName, String selectFields, QFilter[] filters, String orderBys)
- public static DynamicObjectCollection query(String algoKey, String entityName, String selectFields,QFilter[] filters, String orderBys, int top)
eg :
BillList list = this.getControl("billlistap");
String entityName = list.getEntityType().getName();
QFilter filter = QFilter.of("billno",QCP.equals,"1569136331894");
DynamicObjectCollection cols = QueryServiceHelper.query(entityName, "id,billno,entryentity.price price", filter.toArray());
this.getView().showMessage(cols.get(0).getString("price"));
+ 查询单个对象
+ public static DynamicObject queryOne(String entityName, String selectFields, QFilter[] filters)
+ 查询数据集(类似JDBCResultSet)
+ public static DataSet queryDataSet(String algoKey, String entityName, String selectFields, QFilter[] filters,String orderBys)
+ public static DataSet queryDataSet(String algoKey, String entityName, String selectFields, QFilter[] filters,String orderBys, int top)
+ 查询主键
+ public static List<Object> queryPrimaryKeys(String entityName, QFilter[] filters, String orderBys, int top)
+ public static List<Object> queryPrimaryKeys(String algoKey, String entityName, QFilter[] filters, String orderBys,int top)
+ 查询是否存在
+ public static boolean exists(String entityName, Object pkId)
+ public static boolean exists(String entityName, QFilter[] qFilters)
+ 通过全文索引查询单据编码,要求业务对象必须有BillNo字段
+ public static List<BillNoDto> getAllBillNo(String searchKey, int top)
+ kd.bos.db.DB-直接执行SQL的类
public static List<String> getPrimaryKeys(DBRoute dbRoute, String table)
public static <T> T query(DBRoute dbRoute, String sql, ResultSetHandler<T> rh)
public static <T> T query(DBRoute dbRoute, String sql, Object[] params, ResultSetHandler<T> rh)
public static DataSet queryDataSet(String algoKey, DBRoute dbRoute, String sql)
public static DataSet queryDataSet(String algoKey, DBRoute dbRoute, String sql, Object[] params)
public static List<ExtractQuery> extractQuery(DBRoute dbRoute, String sql, Object[] params)
public static int update(DBRoute dbRoute, String sql)
public static int update(DBRoute dbRoute, String sql, Object[] params)
public static boolean execute(DBRoute dbRoute, String sql)
public static boolean execute(DBRoute dbRoute, String sql, Object[] params)
public static int[] executeBatch(DBRoute dbRoute, String sql, List<Object[]> paramsList)
public static PreparedBatch prepareBatch(DBRoute dbRoute, String sql)
public static PreparedStatement prepareStatement(DBRoute dbRoute, String sql)
public static boolean exitsTable(DBRoute dbRoute, String tableName)
public static boolean exitsIndex(DBRoute dbRoute, String tableName, String indexName)
kd.bos.db.DBRoute
什么是DBRoute?

public static final DBRoute other = new DBRoute("");
public static final DBRoute basedata = new DBRoute("basedata");
public static final DBRoute base;
public static final DBRoute main;
public static final DBRoute workflow;
public static final DBRoute log;
public static final DBRoute permission;
public static final DBRoute qing;
public static DBRoute of(String routeKey) {
routeKey = routeKey == null ? "" : routeKey.trim().toLowerCase();
DBRoute route = (DBRoute) sharedDBRouteMap.get(routeKey);
if (route == null) {
route = (DBRoute) sharedDBRouteMap.computeIfAbsent(routeKey, (key) -> {
return new DBRoute(key);
});
}
return route;
}
- 如何在控制台打印SQL
public class DebugServer {
……………………
//设置自定义SQL日志输出
DB.setSqlLogger(new SqlLogger(){
@Override
public void log(String sql) {
System.out.println(sql);
}
});
}
分割线
相关信息
以上就是我关于 金蝶云苍穹之ORM介绍 知识点的整理与总结的全部内容,希望对你有帮助。。。。。。
Powered by Waline v2.15.4