灵活使用dorado 5 - 图文 联系客服

发布时间 : 星期一 文章灵活使用dorado 5 - 图文更新完毕开始阅读31cd2a3e0912a216147929ac

灵活使用dorado 5 v1.0

图1.5 使用自定义数据源

利用keyGenerator属性为记录自动分配主键

在图1.5中注意到在字段id中定义了一叫做keyGenerator的属性,这是在使用Dorado的主键生成功能,保证我们不需要书写JAVA代码就可以自动的为插入到数据库的记录分配主键,这样可以脱离枯燥的分配主键的循环的JAVA代码,具体步骤如下: 1. 定义全局的主键生成策略,在setting.xml中配置data.keyGenerator。

实现com.bstek.dorado.data.KeyGenerator接口,事例代码如下:

public class DemoKeyGenerator implements KeyGenerator { public String getKey(Dataset dataset, ReadRecord record, String value) } } throws Exception { String key = UniqueKey.getKey(); return key; 3. 在DBDataset的主键字段中配置keyGenerator属性,如图1.6。

灵活使用dorado 5 v1.0

图1.6 使用keyGenerator

在上图中并没有配置keyGenerator属性的value值,事实上这里配制的value值会传递到DemoKeyGenerator的getKey方法的第三个参数中(即String value的参数),也就是说如果我们具有很多个主键生成策略,那么可以通过value的值来选择不同的策略,所以DemoKeyGenerator的职能更加像是主键分配策略的工厂。当然我们也可以通过Dataset或者ReadRecord参数来选择策略,不过这样的设计复杂了一些,最简单的就是仅仅使用一种策略。如果项目中使用的是Oracle数据库并且唯一的主键分配策略是从不同的Sequence中获得的键值,那么Dorado已经为我们提供了这样的keyGenerator,使用时setting.xml做如下配置:

图1.7 使用OracleSequenceKeyGenerator的字段配置

注:实现图1.1的功能我们只用到了上面的两个知识点,没有书写任何JAVA代码,主体功能只需要配置信息就可以完成,所以具体实现不在这里累述,图1.2的功能需要重点描述。

服务器端动态为Dataset添加字段。

在访问图1.2即资源分配的页面时,我们需要知道对哪组资源进行分配,分组信息通过URL参数传递,所以URL中应该包含groupby=xxx的参数,本事例中使用

groupby=fruit。当知道了资源分组信息后,我们就可以访问数据库得到该组下的所有资源了,每一种资源作为dataset的一个字段存在,所以字段的数量不是确定的,我们需要调用Server端Dataset与BaseField的API动态的为dataset添加字段,通常来说这个步骤是在视图模型的initDatasets()中做。图1.8是该方法的完整代码:

protected void initDatasets() throws Exception { super.initDatasets(); if (this.getState() == ViewModel.STATE_VIEW) { //@1. 检验groupby参数 String groupby = DoradoContext.getContext(). getParameter(\); throw new Exception(\请在url后添加groupby参数,\ + \例如:?groupby=fruit\); if(null == groupby || \.equals(groupby)){ } } } 灵活使用dorado 5 v1.0

StringBuffer maxSumParameter = new StringBuffer(); ViewBaseField field = null; ViewDataset datasetResource = //@2. 获得需要分配的资源 DBStatement dbStmt = new DBStatement(); dbStmt.setDataSource(\); dbStmt.setSql(\ + \); dbStmt.parameters().setString(\, groupby); List result = dbStmt.queryForList(); dbStmt.close(); //@3. 为datasetResource添加字段 for(int i=0,size = result.size(); i

String groupby = DoradoContext.getContext(). getParameter(\); throw new Exception(\请在url后添加groupby参数,\ + \例如:?groupby=fruit\); if(null == groupby || \.equals(groupby)){ } //@2. 向datasetResource中添加初始化的记录,并构造resourceRecordMap DBStatement dbStmt = new DBStatement(); dbStmt.setDataSource(\); dbStmt.setSql(DBStatement.SELECT, \); List peopleList = dbStmt.queryForList(); dbStmt.close(); Map resourceRecordMap = new HashMap(peopleList.size()); for(int i=0; i