对于绝大多数的业务,都可以用实体视图的方式获取数据,无需编写SQL语句,而且实体视图通用于前端、后台;代码的可维护性胜过直接在后台(APP端、服务端)执行SQL语句;以下内容为业务举例。
数据查询,限定条件:
组织编码,1001;性别,男;工资水平,大于5000;按照人员编码倒序排列;
职员实体(Person)包含属性:编码(number)、组织(orgUnit)、性别(gender)、工资(salary);
其中,职员实体的组织(orgUnit)字段引用了组织实体(OrgUnit);
注:示例代码,并非标准产品中实际业务。
/*
数据查询,限定条件:
组织编码,1001;性别,男;工资水平,大于5000;按照人员编码倒序排列
职员实体(Person)包含属性:编码(number)、组织(orgUnit)、性别(gender)、工资(salary)
其中,职员实体的组织(orgUnit)字段引用了组织实体(OrgUnit)
*/
// 查询字段,不指定时查询本实体所有字段,包含引用属性时,自动进行关联(左连接)
SelectorItemCollection selector = new SelectorItemCollection(); //不指定时查询所有字段
selector.add(new SelectorItemInfo("*")); //当前实体的所有字段
selector.add(new SelectorItemInfo("orgUnit.id")); //引用字段(实体)的ID属性
selector.add(new SelectorItemInfo("orgUnit.number")); //引用字段(实体)的NUMBER属性
selector.add(new SelectorItemInfo("orgUnit.name")); //引用字段(实体)的NAME属性
// 过滤条件,相当于Where之后的条件部分
FilterInfo filter = new FilterInfo();
filter.getFilterItems().add(new FilterItemInfo("orgUnit.number", "1001")); //组织编码(自动与组织表进行关联)
filter.getFilterItems().add(new FilterItemInfo("gender", GenderEnum.MALE_VALUE)); //性别
filter.getFilterItems().add(new FilterItemInfo("salary", 5000, CompareType.GREATER)); //工资
// 排序,相当于Order by之后的语句部分
SorterItemCollection sorters = new SorterItemCollection();
SorterItemInfo sorter = new SorterItemInfo("number"); //排序字段
sorter.setSortType(SortType.DESCEND); //倒序
sorters.add(sorter);
// 构造查询视图(不指定视图时,返回所有数据)
EntityViewInfo view = new EntityViewInfo();
view.setSelector(selector); //查询字段(不指定时查所有字段)
view.setFilter(filter); //筛选条件(不指定时查所有数据)
view.setSorter(sorters); //排序(不指定时按默认排序条件)
PersonCollection coll = PersonFactory.getRemoteInstance().getPersonCollection(view);